[Python #13] [Django #6] 搜索我的文章
hive-105017·@june0620·
0.000 HBD[Python #13] [Django #6] 搜索我的文章
pixabay
https://cdn.pixabay.com/photo/2019/05/14/17/07/web-development-4202909_1280.png
今天解决一下我最需要的搜索我的文章功能。
先简单的实现搜索标签,标题,内容。
关键词定义为 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👍 toni.pal, donekim, laissez-faire, koskl, nokodemion, roseofmylife, slowwalker, daath, moneytron, cpt-sparrow, kggymlife, itchyfeetdonica, kimzwarch, xiaoshancun, veronicalee, forecasteem, udabeu, magicmonk, cnbuddy, wisdomandjustice, mawit07, lindalex, wherein, steemfriends, tina3721, cnbuddy-reward, logicforce, coldhair, minloulou, andrewma, changxiu, cherryzz, andyhsia, real3earch, oldstone, cnstm, oldstone.sct, lianjingmedia, lotusofmymom, jsj1215, julialee66, lucky2015, lupafilotaxia, minigame, steem-agora, june0620, shenchensucc, bert0, josevas217, franyeligonzalez, memeteca, suhunter, melaniewang, zerofive, livingfree, hiveyoda, flamingirl, mangou007, glitterfart, starrouge, bji1203, dudream, coder-bts, tipu, happy-soul, kryptogames, jalentakesphotos, bcm, bartheek, jacuzzi, longer, satoshi-group, jim888, gghite, bluengel, realprince, victory622, sweetsssj, futurecurrency, city-of-dresden,