1. 程式人生 > >每日一句功能簡單實現

每日一句功能簡單實現

效果:

image.png

每天自動獲取最新一條。

封裝了下程式碼:

def get_today_word():
    today = datetime.date.today()
    word=Word.objects.filter(add_time__year=today.year,
                             add_time__month=today.month,
                             add_time__day=today.day).first()
    if word:
        return (json.loads(word.content),today.weekday()+1)
    else:
        s = requests.Session()
        url = "https://api.hibai.cn/api/index/index"
        data = {
            "TransCode": "030111", "OpenId": "123456789", "Body": ""
        }
        ret = s.post(url=url, data=data).content.decode('utf-8')
        Word.objects.create(content=ret)
        return (json.loads(ret),today.weekday()+1)

返回格式是一個元祖,第一個引數是從韓少的ONE介面抓回來的json字串。

image.png

第二個引數是自己拼出的今天的星期。

建立了一張word資料表,把每天的資料儲存下來;另一個好處是,只需要第一次去爬取,第二次開啟頁面,直接從資料庫獲取json資料就行了。

class Word(models.Model):
    '''
    每日一句
    '''
    content = models.TextField(verbose_name=u'json內容')
    add_time = models.DateTimeField(default=datetime.now, verbose_name="新增時間")
    class Meta:
        verbose_name = "每日一句"
        verbose_name_plural = verbose_name
 
    def __str__(self):
        return self.add_time.strftime('%Y-%m-%d')

View中呼叫獲取:

word = get_today_word()

傳到template中只需要render對應的欄位就行了。

<a href="{{ word.0.Body.url }}">
    <div class="sentence"><strong>每日一句</strong>
        <h2>{{ word.0.Body.date|slice:":10" }} 周{{ word.1 }}</h2>
        <p>{{ word.0.Body.word }} --- {{ word.0.Body.word_from }}</p>
    </div>
</a>