每日一句功能簡單實現
阿新 • • 發佈:2019-01-08
效果:
每天自動獲取最新一條。
封裝了下程式碼:
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字串。
第二個引數是自己拼出的今天的星期。
建立了一張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>