Прежде чем мы начнем, давайте представим перевозчика куриного супа. Здесь есть что представить,Серверный соус.
О серверном соусе, говоря простым языком, это инструмент, который может отправлять сообщения в WeChat через сервер в виде общедоступной учетной записи WeChat, а отправляемый контент поддерживает синтаксис Markdown. И первое, что нужно просыпаться каждый день, это открывать WeChat, это обязательно нужно сделать, нет ничего более подходящего в качестве носителя куриного супа, чем серверный соус.
После того, как я пил куриный суп почти 3 месяца, я обнаружил, что серверный соус очень стабилен, и я не пропускал ни одного дня куриного супа. Лог как доказательство:
nohup: ignoring input
2018-07-09 10:55:25 开始执行任务
2018-07-10 08:00:00 推送成功。
2018-07-11 08:00:00 推送成功。
2018-07-12 08:00:00 推送成功。
2018-07-13 08:00:00 推送成功。
2018-07-14 08:00:00 推送成功。
2018-07-15 08:00:00 推送成功。
2018-07-16 08:00:00 推送成功。
2018-07-17 08:00:00 推送成功。
2018-07-18 08:00:01 推送成功。
2018-07-19 08:00:00 推送成功。
2018-07-20 08:00:00 推送成功。
2018-07-21 08:00:00 推送成功。
2018-07-22 08:00:00 推送成功。
2018-07-23 08:00:00 推送成功。
2018-07-24 08:00:00 推送成功。
2018-07-25 08:00:00 推送成功。
2018-07-26 08:00:00 推送成功。
2018-07-27 08:00:00 推送成功。
2018-07-28 08:00:00 推送成功。
2018-07-29 08:00:00 推送成功。
2018-07-30 08:00:00 推送成功。
2018-07-31 08:00:00 推送成功。
2018-08-01 08:00:00 推送成功。
2018-08-02 08:00:00 推送成功。
2018-08-03 08:00:00 推送成功。
2018-08-04 08:00:00 推送成功。
2018-08-05 08:00:00 推送成功。
2018-08-06 08:00:00 推送成功。
2018-08-07 08:00:00 推送成功。
2018-08-08 08:00:00 推送成功。
2018-08-09 08:00:00 推送成功。
2018-08-10 08:00:00 推送成功。
2018-08-11 08:00:00 推送成功。
2018-08-12 08:00:00 推送成功。
2018-08-13 08:00:00 推送成功。
2018-08-14 08:00:00 推送成功。
2018-08-15 08:00:00 推送成功。
2018-08-16 08:00:00 推送成功。
2018-08-17 08:00:00 推送成功。
2018-08-18 08:00:00 推送成功。
2018-08-19 08:00:00 推送成功。
2018-08-20 08:00:00 推送成功。
2018-08-21 08:00:01 推送成功。
2018-08-22 08:00:00 推送成功。
2018-08-23 08:00:00 推送成功。
2018-08-24 08:00:01 推送成功。
2018-08-25 08:00:00 推送成功。
2018-08-26 08:00:00 推送成功。
2018-08-27 08:00:00 推送成功。
2018-08-28 08:00:00 推送成功。
2018-08-29 08:00:00 推送成功。
2018-08-30 08:00:00 推送成功。
2018-08-31 08:00:00 推送成功。
2018-09-01 08:00:00 推送成功。
2018-09-02 08:00:00 推送成功。
2018-09-03 08:00:00 推送成功。
2018-09-04 08:00:00 推送成功。
2018-09-05 08:00:00 推送成功。
2018-09-06 08:00:00 推送成功。
2018-09-07 08:00:00 推送成功。
2018-09-08 08:00:00 推送成功。
2018-09-09 08:00:00 推送成功。
2018-09-10 08:00:00 推送成功。
2018-09-11 08:00:00 推送成功。
2018-09-12 08:00:00 推送成功。
2018-09-13 08:00:00 推送成功。
2018-09-14 08:00:00 推送成功。
2018-09-15 08:00:00 推送成功。
2018-09-16 08:00:00 推送成功。
2018-09-17 08:00:00 推送成功。
2018-09-18 08:00:00 推送成功。
2018-09-19 08:00:00 推送成功。
2018-09-20 08:00:01 推送成功。
2018-09-21 08:00:00 推送成功。
2018-09-22 08:00:00 推送成功。
2018-09-23 08:00:00 推送成功。
2018-09-24 08:00:00 推送成功。
2018-09-25 08:00:00 推送成功。
2018-09-26 08:00:00 推送成功。
2018-09-27 08:00:00 推送成功。
2018-09-28 08:00:00 推送成功。
2018-09-29 08:00:00 推送成功。
2018-09-30 08:00:00 推送成功。
2018-10-01 08:00:00 推送成功。
Для подробного ознакомления и использования серверного соуса, пожалуйста, ознакомьтесь с руководством по эксплуатации серверного соуса, которое очень подробное и простое. Кроме того, цель серверного соуса - ненормально тревожить сервер, пожалуйста, не злоупотребляйте этим.
Нет картинки, чтобы сказать... ну, сначала посмотрите на картинку:
Мы видим, что контент, который нужно получить, — это текст куриного бульона и погода. Я использую интерфейс Kingsoft PowerWord для куриного супаopen.iciba.com/dsapi/, чтобы получить погоду, нужно использовать интерфейс карты Гаоде.
получить куриный суп
Интерфейс ежедневной статьи Kingsoft PowerWord напрямую возвращается методом GET в следующем формате:
{
"sid": "3143",
"tts": "http://news.iciba.com/admin/tts/2018-10-01-day.mp3",
"content": "A man has free choice to begin love, but not to end it.",
"note": "一个人可以选择爱上谁,当他要结束爱情时,他是没有选择的。",
"love": "1150",
"translation": "小编的话:爱情一直是不变的话题。遇见了心爱的人,可以说是幸运的,无论结局怎样,都可以说是幸福的。白头到老,固然很好,如果分手,或者为爱情伤心,也很幸福,因为毕竟爱过。每个人对爱情的理解不尽相同,毕竟感情这东西,如人饮水冷暖自知。",
"picture": "http://cdn.iciba.com/news/word/20181001.jpg",
"picture2": "http://cdn.iciba.com/news/word/big_20181001b.jpg",
"caption": "词霸每日一句",
"dateline": "2018-10-01",
"s_pv": "0",
"sp_pv": "0",
"tags": [{
"id": null,
"name": null
}],
"fenxiang_img": "http://cdn.iciba.com/web/news/longweibo/imag/2018-10-01.jpg"
}
Что нам нужно, так это дата, английский язык, полуденный перевод и слова редактора, поэтому мы можем написать это:
def get_soup():
"""
获取鸡汤
"""
response = requests.get(soup_url)
json_data = response.json()
date = json_data['dateline']
content = json_data['content']
note = json_data['note']
picture = json_data['picture']
translation = json_data['translation']
return date, content, note, picture, translation
Здесь мы используем библиотеку запросов, базовую операцию.
узнать погоду
Я использую погодный интерфейс карты Gaode.Не удается подключиться. Amapa.com/API/Web Color RV…, вы можете выбрать другое.
def get_weather():
"""
获取天气
"""
response = requests.get(weather_url)
json_data = response.json()
if json_data['status'] == '1':
return json_data['forecasts'][0]['casts'][0]
else:
print(get_time() + " 天气获取失败:" + json_data['info'])
return None
приготовить куриный суп
Нам нужно склеить полученную информацию о погоде и курином бульоне в формате Markdown:
def make_soup():
"""
制作鸡汤
"""
soup = get_soup()
weather = get_weather()
if weather is None:
time.sleep(3)
weather = get_weather()
title = "早上好!"
desp = "#### {date}\n\n白天{dayweather},夜晚{nightweather},温度{nighttemp}℃ ~ {daytemp}℃。\n\n" \
"*{content}*\n\n{note}\n\n![]({picture})\n\n{translation}" \
.format(date=soup[0],
dayweather=weather['dayweather'],
nightweather=weather['nightweather'],
nighttemp=weather['nighttemp'],
daytemp=weather['daytemp'],
content=soup[1],
note=soup[2],
picture=soup[3],
translation=soup[4])
push_wx(title, desp)
куриный суп
Затем, вызвав интерфейс серверного соуса, куриный бульон отправляется на развлечение~
def push_wx(text=None, desp=""):
"""
推送消息到微信
"""
params = {
"text": text,
"desp": desp
}
response = requests.get(server_url, params=params)
json_data = response.json()
if json_data['errno'] == 0:
print(get_time() + " 推送成功。")
else:
print("{0} 推送失败:{1} \n {2}".format(get_time(), json_data['errno'], json_data['errmsg']))
Отправляйте куриный суп каждый день
Этот куриный бульон не нужно каждый день вручную отправлять, нам нужна запланированная задача, чтобы отправлять его каждый день в одно и то же время. В это время вам нужно написать запланированное задание. Здесь мы используем библиотеку APScheduler.Если вы не знаете ее, загляните в официальную документацию.Вот пример 8 часов каждое утро.
В качестве последнего шага запустите всю задачу:
if __name__ == '__main__':
print(get_time() + " 开始执行任务")
scheduler.add_job(make_soup, 'cron', day_of_week='0-6', hour=8, minute=00, second=00)
scheduler.start()
запустить на сервере
Загрузите этот py-файл на свой сервер, например Python3, CentOS, с помощью команды:
nohup python3 -u chicken_soup.py > nohup.out 2>&1 &
Перейдите к сценарию запуска, чтобы он мог работать в фоновом режиме, даже если терминал закрыт, и будет создан файл для сохранения напечатанного содержимого.
Полный код выглядит следующим образом:
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import requests
import time
from apscheduler.schedulers.blocking import BlockingScheduler
server_url = "https://sc.ftqq.com/Server酱SCKEY.send"
soup_url = "http://open.iciba.com/dsapi/"
weather_url = "http://restapi.amap.com/v3/weather/weatherInfo?city=城市id&key=高德地图key&extensions=all"
scheduler = BlockingScheduler()
def get_time():
"""
获取当前时间
"""
return time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
def push_wx(text=None, desp=""):
"""
推送消息到微信
"""
params = {
"text": text,
"desp": desp
}
response = requests.get(server_url, params=params)
json_data = response.json()
if json_data['errno'] == 0:
print(get_time() + " 推送成功。")
else:
print("{0} 推送失败:{1} \n {2}".format(get_time(), json_data['errno'], json_data['errmsg']))
def get_soup():
"""
获取鸡汤
"""
response = requests.get(soup_url)
json_data = response.json()
date = json_data['dateline']
content = json_data['content']
note = json_data['note']
picture = json_data['picture']
translation = json_data['translation']
return date, content, note, picture, translation
def get_weather():
"""
获取天气
"""
response = requests.get(weather_url)
json_data = response.json()
if json_data['status'] == '1':
return json_data['forecasts'][0]['casts'][0]
else:
print(get_time() + " 天气获取失败:" + json_data['info'])
return None
def make_soup():
"""
制作鸡汤
"""
soup = get_soup()
weather = get_weather()
if weather is None:
time.sleep(3)
weather = get_weather()
title = "早上好!"
desp = "#### {date}\n\n白天{dayweather},夜晚{nightweather},温度{nighttemp}℃ ~ {daytemp}℃。\n\n" \
"*{content}*\n\n{note}\n\n![]({picture})\n\n{translation}" \
.format(date=soup[0], dayweather=weather['dayweather'], nightweather=weather['nightweather'],
nighttemp=weather['nighttemp'], daytemp=weather['daytemp'],
content=soup[1],
note=soup[2],
picture=soup[3],
translation=soup[4])
push_wx(title, desp)
if __name__ == '__main__':
print(get_time() + " 开始执行任务")
scheduler.add_job(make_soup, 'cron', day_of_week='0-6', hour=8, minute=00, second=00)
scheduler.start()
Это конец этого урока, давайте повеселимся.