教你搭建可以解析tumblr的微信公众号

微信公众号:tumblr自助餐,网站:http://www.wx-tumblr.tk

教程分为三个部分:

  • 微信公众号部分

  • DigitalOcean服务器搭建部分

  • 网站搭建部分

微信公众号部分

需要搭建一个像tumblr自助餐一样的微信公众号,自然需要申请一个微信公众号。具体过程不累述,可以直接到微信公众号主页申请一个个人订阅号即可。如果不想那么麻烦,也可以用到微信公众号测试平台,用微信登陆得到一个测试的微信公众号。
微信公众号部分未完,需要完成下面部分才能继续。
为了方便就是用微信公众号测试平台。微信登陆之后看到(初始状态接口配置信息是空白的,这里需要第二部创建了服务器才用到):

DigitalOcean部分

有了微信公众号,你还需要一个服务器才行。这里使用的是DigitalOcean服务器,其他平台自测。

申请DigitalOcean账号

到DigitalOcean注册页面注册一个账号。推荐直接点开我提供的链接进行注册,这样你就不用进行充值认证,账户上就有10美元,可以使用两个月。当然,一般注册之后需要进行充值5美元进行认证,具体认证过程可以看认证教程。有信用卡的可以使用信用卡,没有信用卡的可以使用paypal。
另外,如果你是学生的话,还可以去github申请一个学生包,然后有50美元的DigitalOcean优惠码。

开通DigitalOcean服务器

注册并进行认证之后,下一步就是申请一个vps来。首先到这个页面然后点击右上角的Create Droplet。然后按照下面的选项进行选择教你搭建可以解析tumblr的微信公众号_第1张图片。地区可以自己选,SSH key一开始是空白的。选好了之后就点击最下面的Create进行创建。
创建之后就会收到一封邮件,信息包括服务器ip用户名服务器初始密码。。

配置服务器

申请了vps服务器之后就需要配置了。首先需要下载Putty。

这里要说一下putty的使用说明:在putty打开服务器之后,点击鼠标右键就会复制你黏贴板的东西,然后选中putty的一段文字,该段文字就会复制到你的黏贴板。记住!

下载打开之后填入刚刚收到的服务器信息教你搭建可以解析tumblr的微信公众号_第2张图片。打开之后显示安全提示教你搭建可以解析tumblr的微信公众号_第3张图片,选就可以。
之后就是login as: root[email protected]'s password:这里输入初始密码,可以直接复制密码,然后点击鼠标右键密码就复制进去了。
教你搭建可以解析tumblr的微信公众号_第4张图片
第一次登陆服务器,会让你改密码。步骤是:

  1. 输入初始密码

  2. 输入自设密码

  3. 再次输入自设密码

如图:教你搭建可以解析tumblr的微信公众号_第5张图片
改完密码之后,分别复制粘贴下面的代码:

  • 切换目录:cd /home/django/django_project/

  • 创建app:python manage.py startapp wechat

  • 编辑djangp_project/settings.py,输入:vi django_project/settings.py。按上下键移到INSTALL APPS后面,输入o进入编辑状态。

  • 输入:'wechat',,然后按Esc,再输入:wq!保存退出。如图教你搭建可以解析tumblr的微信公众号_第6张图片

  • 编辑django_project/urls.py,输入vi django_project/urls.py,然后添加一行url(r'^$','wechat.views.index').如图教你搭建可以解析tumblr的微信公众号_第7张图片.然后按Esc退出编辑状态,输入:wq!保存退出。

  • 安装必要插件:

    • pip install requests

    • pip install wechat-sdk

  • 切换目录: cd wechat

  • 创建新脚本: vi tumblr.py

  • 输入i

  • 复制下面代码,复制之前还需要修改最后ftp一部分,填入自己的网站的ftp信息,具体到第三部分。

# -*- coding=utf-8 -*-

from threading import Thread
import Queue
import requests
import re
import os
import sys
from ftplib import FTP
import time

name=sys.argv[1]
os.chdir('/home/django/django_project/wechat')
url='http://%s.tumblr.com/api/read?&num=50&start='%name
UQueue=Queue.Queue()
for i in [i*50 for i in range(6)]:
    ul=url+str(i)
    UQueue.put(ul)
extractpicre = re.compile(r'(?<=<photo-url max-width="1280">).+?(?=</photo-url>)',flags=re.S)   #search for url of maxium size of a picture, which starts with '<photo-url max-width="1280">' and ends with '</photo-url>'
extractvideore=re.compile('/tumblr_(.*?)" type="video/mp4"')

video_links = []
pic_links = []
vhead = 'https://vt.tumblr.com/tumblr_%s.mp4'

class Consumer(Thread):

    def __init__(self, l_queue):
        super(Consumer,self).__init__()
        self.queue = l_queue

    def run(self):
        session = requests.Session()
        while 1:
            link = self.queue.get()
            print 'start parse post: ' + link
            try:
                content = session.get(link).content
                videos = extractvideore.findall(content)
                video_links.extend([vhead % v for v in videos])
                pic_links.extend(extractpicre.findall(content))
            except:
                print 'url: %s parse failed\n' % link
            if self.queue.empty():
                break
        

def main():
    task=[]
    for i in range(6):
        t=Consumer(UQueue)
        task.append(t)
    for t in task:
        t.start()
    for t in task:
        t.join
    while 1:
        if task[0].is_alive() or task[1].is_alive() or task[2].is_alive() or task[3].is_alive() or task[4].is_alive() or task[5].is_alive():
            continue
        else:
            break

def write():
    video=[i.replace('/480','') for i in video_links]
    with open('%s.html'%name, 'a') as f:
        for line in list(set(video)):
            f.write("<tr><td><a href='%s'>%s</a></td></tr>\n"%(line,line.split('/')[-1],line))
        for line in list(set(pic_links)):
            f.write("<tr><td><a href='%s'>%s</a></td></tr>\n"%(line,line.split('/')[-1]))
    with open('index.html', 'r') as f:
        before=f.read()
    if name in before:
        bc=int(re.findall(">%s</a></td><td>count:(\d+)</td></tr>"%name,before)[0])
        count=bc+1
        after=before.replace(">%s</a></td><td>count:%d</td></tr>"%(name,bc),">%s</a></td><td>count:%d</td></tr>"%(name,count))
    else:
        print 'new'*160
        after=before+'\n<tr><td><a href="/%s.html">%s</a></td><td>count:1</td></tr>'%(name,name)
    with open('index.html', 'w') as f:
        f.write(after)
    

if __name__=='__main__':
    main()
    #time.sleep(5)
    write()
    print len(video_links)
    print len(pic_links)
    ftp=FTP()
    ftp.set_debuglevel(2)
    ftp.connect('你的网站ftp ip','端口')
    ftp.login('ftp用户名','ftp密码')
    print ftp.getwelcome()
    filename='%s.html'%name
    filename2='index.html'
    file_handle=open(filename,'r')
    file_handle2=open(filename2,'r')
    bufsize=1024
    ftp.storbinary('STOR %s.html'%name,file_handle,bufsize)
    ftp.storbinary('STOR index.html',file_handle2,bufsize)
    ftp.quit()
  • Esc退出编辑模式,再输入:wq!保存退出。

  • 编辑views.py,输入:vi views.py,先输入20dd删除原有的代码。然后输入i进入编辑状态,复制下面代码.
    复制之前还需要改几个地方:WECHAT_TOKEN、AppID、AppSecret、website。分别对应于微信部分Token、appID、appsecret、以及第三部分才会申请的网站地址Token随便填。

# -*- coding: utf-8 -*-
from __future__ import unicode_literals
 
from django.http.response import HttpResponse, HttpResponseBadRequest
from django.views.decorators.csrf import csrf_exempt
 
from wechat_sdk import WechatBasic
from wechat_sdk.exceptions import ParseError
from wechat_sdk.messages import TextMessage
import subprocess
import requests
import re

WECHAT_TOKEN = ''
AppID = ''
AppSecret = ''
website=''

HOME = 'http://%s.tumblr.com/'
vhead = 'https://vt.tumblr.com/%s.mp4'
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; rv:42.0) \ Gecko/20100101 Firefox/42.0', }


wechat_instance = WechatBasic(
    token=WECHAT_TOKEN,
    appid=AppID,
    appsecret=AppSecret
)

def check(uid):
    url=HOME%uid
    cont=requests.get(url)
    if cont.ok:
        if re.findall('http://%s.tumblr.com/post/\d{12}'%uid,cont.content):
            return True
        else:
            return False
    else:
        return False


@csrf_exempt
def index(request):
    if request.method == 'GET':

        signature = request.GET.get('signature')
        timestamp = request.GET.get('timestamp')
        nonce = request.GET.get('nonce')
 
        if not wechat_instance.check_signature(
                signature=signature, timestamp=timestamp, nonce=nonce):
            return HttpResponseBadRequest('Verify Failed')
 
        return HttpResponse(
            request.GET.get('echostr', ''), content_type="text/plain")
 
 
 
    try:
        wechat_instance.parse_data(data=request.body)
    except ParseError:
        return HttpResponseBadRequest('Invalid XML Data')
 

    message = wechat_instance.get_message()
    response = wechat_instance.response_text(
        content = (
            '233333. Reply the tumblr user id, you will get the video and pictures links'
            ))
    if isinstance(message, TextMessage):
        content = message.content.strip()
        if content.split()[0] == 'tumblr':
            uid=content.split()[1]
            if check(uid):
                subprocess.Popen(['python','/home/django/django_project/wechat/tumblr.py',uid])
                reply_text = (
                    'wait about 1 minutes,you can open:\n%s/%s.html \ \nand here is the home page:%s \'%(website,uid,website) ) else: reply_text = ('Please check your id!\nyour id is invalid!') else: reply_text = ("Welcome Follow me!\nHere is some tips for using it!\nhttp://t.cn/RGd6z2J \ \nand here is the home page:%s \"%website) response = wechat_instance.response_text(content=reply_text) else: response = wechat_instance.response_text(content="Welcome Follow me!\nHere is some tips for using it!\nhttp://t.cn/RGd6z2J \ \nand here is the home page:%s \"%website) return HttpResponse(response, content_type="application/xml") 

复制之后,输入Esc退出编辑状态,再输入:wq!保存退出。

到了这里,服务器端基本上以及弄好。我们再回到微信部分配置接口配置信息。如图,URL就是你的服务器ip,Token就是上面你自己填的Token。

点击提交,如果通过说明就没问题。

网站配置部分

网站我们选择3v免费空间,注册一个账号并登陆。到ftp管理查看ftp信息,然后把信息填到上面的tumblr.py。
然后网站地址填到views.pywebsite里面。
到这里教程完毕

付费搭建联系我QQ:920082975

你可能感兴趣的:(python,微信)