pixabay
今天解决一下我最需要的搜索我的文章功能。
先简单的实现搜索标签,标题,内容。
关键词定义为 dict,里面装tags,titles,texts三个条件,并都设置为list。
query = {
'tags': [],
'titles': [],
'texts': []
}
初步逻辑是,1)创建空list 2)从我的文章列表抽取包含关键词的文章并保存到这个list。
但是...问题多多。一旦不小心误判tags,titles,texts三项条件,就会造成保存同样的文章到list。
那如果不用list用集合怎么样呢?也有问题,因为集合无法装dict。
再一个代码的可读性会下降。
那把逻辑反过来呢?
就是从我的文章列表中删除掉不符合tags, titles, texts这三项条件的文章。比起第一个逻辑应该会好点。
- 先获取我的文章列表,用副本循环。
- 从列表删除不符合条件的文章。
- 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
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.