[Python #13] [Django #6] 搜索我的文章

in #hive-1050172 months ago

pixabay

今天解决一下我最需要的搜索我的文章功能。

先简单的实现搜索标签,标题,内容。
关键词定义为 dict,里面装tags,titles,texts三个条件,并都设置为list。

        query = {
            'tags': [],
            'titles': [],
            'texts': []
        }

初步逻辑是,1)创建空list 2)从我的文章列表抽取包含关键词的文章并保存到这个list。
但是...问题多多。一旦不小心误判tags,titles,texts三项条件,就会造成保存同样的文章到list。
那如果不用list用集合怎么样呢?也有问题,因为集合无法装dict。
再一个代码的可读性会下降。

那把逻辑反过来呢?
就是从我的文章列表中删除掉不符合tags, titles, texts这三项条件的文章。比起第一个逻辑应该会好点。

  1. 先获取我的文章列表,用副本循环。
  2. 从列表删除不符合条件的文章。
    • tags: query 与文章的标签都是list,可以用和交集来判断。再用not判断相反条件。
    • titles: query为 list,文章标题为String,所以不得不用到循环,幸好用python的内部函数all可以轻松实现。
    • texts: 同于titles。最后把三个条件用 and 连接即可。虽然 if 文有点长,无所谓了,因为我不是专业开发,哈哈。
      👇
import json
from steem import Steem


def tag_list(json_metadata: str):
    metadata = json.loads(json_metadata)
    if metadata:
        return metadata['tags']
    else:
        return []


def search_blogs(query: dict, account: str = 'june0620'):

    s = Steem()
    blogs = s.get_blog(account, 0, 400)
    for blog in blogs[:]:
        blog_data = blog['comment']
        title = blog_data['title'].lower()
        body = blog_data['body'].lower()
        tags = tag_list(blog_data['json_metadata'])
        q_titles = query['titles']
        q_texts = query['texts']
        q_tags = query['tags']
        if not set(q_tags) & set(tags) and all(q_title not in title for q_title in q_titles) and all(q_text not in body for q_text in q_texts):
            blogs.remove(blog)
    return blogs


主函数应该差不多了,简单测试了下没有发现问题。
那么,赶紧试试映射到网页吧。UI还没有实现,先简单的改之前的网页吧。关键词也用手动输入。👇

        query = {
            'tags': ['django', 'music'],
            'titles': ['온워드', '炸鸡腿'],
            'texts': ['사랑하겠습니다', '몸빵잼']
        }


👇 成功了,换几个关键词也发现什么问题。我得赶紧做一个UI,享受我最需要的功能。
还有,待续高级搜索功能。


[Cookie 😅]
Python 3.7.4
Django 2.2.4
steem-python 1.0.1
goorm IDE 1.3

Sort:  

😀 谢谢萍萍~

俊俊在啊🤭

刚想睡觉,就见到你了 😃

这么早睡啊🐷🤭