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

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:  

[US$18.50](▼39%)[Xiaomi]🚨2020 최신 항바이러스 필터 입고!!🚨 샤오미 공기청정기 필터 / 미에어 필터 / 고효율 정화 / 활성탄 필터 / 포름알데히드 제거 / 고밀도 헤파필터 / 무료배송

WWW.QOO10.COM

@june0620 transfered 1.0 KRWP to @krwp.burn. voting percent : 0.74%, voting power : 78.72%, steem power : 1892786.45, STU KRW : 1200.
@june0620 staking status : 60 KRWP
@june0620 limit for KRWP voting service : 0.12 KRWP (rate : 0.002)
What you sent : 1.0 KRWP
Refund balance : 0.88 KRWP [46321955 - 553abec66911364168a03f845248d1b3fdbae11a]

Coin Marketplace

STEEM 0.30
TRX 0.11
JST 0.033
BTC 64275.05
ETH 3147.49
USDT 1.00
SBD 4.29