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

in cn •  4 years 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

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE BLURT!
Sort Order:  
  ·  4 years ago  ·  

I did not know there is such thing as steem-python :).

I appreciate Your work very much, although I don't understand East Asian letters.