Python реализует регулярную отправку ежедневного предложения в WeChat

Python

предисловие

Несколько дней назад я увидела в Интернете статью «Научи вас пользоваться WeChat, чтобы каждый день желать спокойной ночи женским билетам». Хорошо, приступим к работе! Сервер есть, окружение Python есть, IDE открыта... и еще... однако... я понял очень серьезную проблему... нет девушки (T_T)...

Разработка WeChat ведется давно, в разработке WeChat есть волшебный интерфейс под названиемШаблон интерфейс сообщения, он может отправлять настроенные шаблонные сообщения с сервера пользователю в соответствии с openid пользователя. Из-за этого мы можем использовать эту функцию для отправки сообщений пользователю в любое время на стороне сервера (при условии, что пользователь следует официальной учетной записи ).

Выводы сделаны по трем пунктам: 1. Можно настроить формат шаблонного сообщения, 2. Можно настроить содержимое шаблонного сообщения и 3. Можно настроить время отправки шаблонного сообщения. Затем мы можем использовать эти свойства, чтобы сделать аргумент для себя.Доброе утропрограмма!

лабораторная среда

  1. Облачный Linux-сервер Alibaba
  2. Python 2.7

Введение в API ежедневных предложений iWord

Адрес вызова:http://open.iciba.com/dsapi/
Способ запроса: получить
Параметры запроса:

параметр обязательный тип инструкция
date нет string Формат:2013-05-06;еслиdateто есть по умолчанию берется текущий день
type нет string необязательное значениеlastиnext;отdateДата зависит отlastВернуться к предыдущему дню,nextВернуться на следующий день после

Пример запроса:

Пример Python

#!/usr/bin/python
#coding=utf-8
import json
import urllib2
def get_iciba():
  url = 'http://open.iciba.com/dsapi/'
  request = urllib2.Request(url)
  response = urllib2.urlopen(request)
  json_data = response.read()
  data = json.loads(json_data)
  return data
print get_iciba()скопировать код

PHP-пример

<?php
function https_request($url, $data = null){
  $curl = curl_init();
  curl_setopt($curl, CURLOPT_URL, $url);
  curl_setopt($curl, CURLOPT_HEADER, 0);
  curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
  curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
  if (!empty($data)) {
    curl_setopt($curl, CURLOPT_POST, 1);
    curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
  }
  curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  $output = curl_exec($curl);
  curl_close($curl);
  return $output;
}
function get_iciba(){
  $url = 'http://open.iciba.com/dsapi/'
  $result = https_request($url);
  $data = json_decode($result);
  return $data;
}
echo get_iciba();скопировать код

Тип возвращаемого значения: JSON Объяснение поля JSON:

Имя свойства тип значения свойства инструкция
sid string ежедневный идентификатор
tts string аудио адрес
content string Английский контент
note string Китайский контент
love string Количество лайков на предложение в день
translation string Поэтический редактор
picture string Адрес карты
picture2 string Адрес с большой картинкой
caption string заглавие
dateline string время
s_pv string количество просмотров
sp_pv string Представления голосовой оценки
tags string Связанные теги
fenxiang_img string Синтезированные изображения, рекомендуется поделиться с Weibo

Пример нормального возврата:

{
  "sid": "3080",
  "tts": "http://news.iciba.com/admin/tts/2018-08-01-day.mp3",
  "content": "No matter how hard we try to be mature, we will always be a kid when we all get hurt and cry. ",
  "note": "不管多努力蜕变成熟,一旦受伤哭泣时,我们还是像个孩子。",
  "love": "1966",
  "translation": "小编的话:这句话出自小说《彼得·潘》。岁月永远年轻,我们慢慢老去。不管你如何蜕变,最后你会发现:童心未泯,是一件值得骄傲的事情。长大有时很简单,但凡事都能抱着一颗童心去快乐享受却未必容易。",
  "picture": "http://cdn.iciba.com/news/word/20180801.jpg",
  "picture2": "http://cdn.iciba.com/news/word/big_20180801b.jpg",
  "caption": "词霸每日一句",
  "dateline": "2018-08-01",
  "s_pv": "0",
  "sp_pv": "0",
  "tags": [
    {
      "id": null,
      "name": null
    }
  ],
  "fenxiang_img": "http://cdn.iciba.com/web/news/longweibo/imag/2018-08-01.jpg"
}скопировать код

Официальная документация этого интерфейса (одно предложение в день):open.iciba.com/?c=wiki
Использованная литература:Kingsoft · Платформа разработки

Войдите в тестовую учетную запись интерфейса общедоступной платформы WeChat.

Отсканируйте и войдите в тестовый номер общедоступной платформы.
Адрес для подачи заявки на тестовый номер https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login

Подтвердить вход на мобильном

оказаться新增测试模板, добавить шаблон сообщения

Заполните заголовок шаблона每日一句, заполните следующее содержимое шаблона

{{content.DATA}}

{{note.DATA}}

{{translation.DATA}}скопировать код

После отправки и сохранения помните模板ID, будет использоваться через некоторое время

оказаться测试号信息,Помнитеappidиappsecret, будет использоваться через некоторое время

оказаться测试号二维码. Отсканируйте этот QR-код своим мобильным телефоном, после того, как вы выполните его, ваш псевдоним появится в списке справа, запомните идентификатор WeChat, он будет использоваться позже (Примечание: этот идентификатор WeChat не является вашим настоящим идентификатором WeChat)

Программа для отправки шаблонных сообщений WeChat

Вам нужно изменить только 4 места в этой программе, см. примечания

#!/usr/bin/python
#coding=utf-8
import json
import urllib2

class iciba:
    # 初始化
    def __init__(self, wechat_config):
        self.appid = wechat_config['appid']
        self.appsecret = wechat_config['appsecret']
        self.template_id = wechat_config['template_id']
        self.access_token = ''

    # 获取access_token
    def get_access_token(self, appid, appsecret):
        url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s' % (appid, appsecret)
        request = urllib2.Request(url)
        response = urllib2.urlopen(request)
        json_data = response.read()
        data = json.loads(json_data)
        access_token = data['access_token']
        self.access_token = access_token
        return self.access_token

    # 发送消息
    def send_msg(self, openid, template_id, iciba_everyday):
        msg = {
            'touser': openid,
            'template_id': template_id,
            'url': iciba_everyday['fenxiang_img'],
            'data': {
                'content': {
                    'value': iciba_everyday['content'],
                    'color': '#0000CD'
                    },
                'note': {
                    'value': iciba_everyday['note'],
                },
                'translation': {
                    'value': iciba_everyday['translation'],
                }
            }
        }
        json_data = json.dumps(msg)
        if self.access_token == '':
            self.get_access_token(self.appid, self.appsecret)
        access_token = self.access_token
        url = 'https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=%s' % str(access_token)
        request = urllib2.Request(url, data=json_data)
        response = urllib2.urlopen(request)
        result = response.read()
        return json.loads(result)

    # 获取爱词霸每日一句
    def get_iciba_everyday(self):
        url = 'http://open.iciba.com/dsapi/'
        request = urllib2.Request(url)
        response = urllib2.urlopen(request)
        json_data = response.read()
        data = json.loads(json_data)
        return data

    # 为设置的用户列表发送消息
    def send_everyday_words(self, openids):
        everyday_words = self.get_iciba_everyday()
        for openid in openids:
            result = self.send_msg(openid, self.template_id, everyday_words)
            if result['errcode'] == 0:
                print ' [INFO] send to %s is success' % openid
            else:
                print ' [ERROR] send to %s is error' % openid

    # 执行
    def run(self, openids):
        self.send_everyday_words(openids)


if __name__ == '__main__':
    # 微信配置
    wechat_config = {
        'appid': 'xxxxxx', #此处填写你的appid
        'appsecret': 'xxxxxxx', #此处填写你的appsecret
        'template_id': 'xxxxx' #此处填写你的模板消息ID
    }
    # 用户列表
    openids = [
        'xxxxx', #此处填写你的微信号
        #'xxxx', #如果有多个用户也可以
    #'xxxx',
    ]
    # 执行
    icb = iciba(wechat_config)
    icb.run(openids)скопировать код

тестовая программа

Выполнить программы на Linux

Проверьте это на своем телефоне и получите ежедневное сообщение

Развертывание

Настройка запланированных задач в Linux

crontab -eскопировать код

Добавьте следующее

0 6 * * *    python /root/python/iciba/main-v1.0.pyскопировать код

Примечание: Смысл вышеуказанного контента в том, что каждый день6:00, выполните эту программу Python
Проверьте, успешно ли поставлена ​​запланированная задача

crontab -lскопировать код

На данный момент развертывание программы завершено, пожалуйста, завтра6:00Проверьте это!
Схема эффекта выглядит следующим образом