频道栏目
首页 > 程序开发 > Web开发 > Python > 正文
利用python搭建可以解析tumblr的微信公众号
2017-06-10 13:55:00         来源:小样的博客  
收藏   我要投稿

利用python搭建可以解析tumblr的微信公众号

教程分为三个部分:

微信公众号部分

DigitalOcean服务器搭建部分

网站搭建部分

微信公众号部分

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


DigitalOcean部分

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

申请DigitalOcean账号

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

开通DigitalOcean服务器

注册并进行认证之后,下一步就是申请一个vps来。首先到这个页面然后点击右上角的Create DropletCD。然后按照下面的选项进行选择SE。地区可以自己选,SSH key一开始是空白的。选好了之后就点击最下面的Create进行创建。
创建之后就会收到一封邮件,信息包括服务器ip用户名服务器初始密码\

配置服务器

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

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

下载打开之后填入刚刚收到的服务器信息\。打开之后显示安全提示\,选就可以。
之后就是login as: rootroot@xx.xx.xx.xx's password:这里输入初始密码,可以直接复制密码,然后点击鼠标右键密码就复制进去了。
\
第一次登陆服务器,会让你改密码。步骤是:

输入初始密码

输入自设密码

再次输入自设密码

如图:\
改完密码之后,分别复制粘贴下面的代码:

切换目录: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!保存退出。如图\

编辑django_project/urls.py,输入vi django_project/urls.py,然后添加一行url(r'^$','wechat.views.index').如图enter description here.然后按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='https://https://blog.csdn.net/u011659379/article/details/%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'(?<=).+?(?=)',flags=re.S)   #search for url of maxium size of a picture, which starts with '' and ends with ''
extractvideore=re.compile('/tumblr_(.*?)" type="video/mp4"')

video_links = []
pic_links = []
vhead = 'https://vt.tumblr.com/tumblr_https://blog.csdn.net/u011659379/article/details/%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: https://blog.csdn.net/u011659379/article/details/%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('https://blog.csdn.net/u011659379/article/details/%s.html'%name, 'a') as f:
        for line in list(set(video)):
            f.write("https://blog.csdn.net/u011659379/article/details/%s\n"%(line,line.split('/')[-1],line))
        for line in list(set(pic_links)):
            f.write("https://blog.csdn.net/u011659379/article/details/%s\n"%(line,line.split('/')[-1]))
    with open('index.html', 'r') as f:
        before=f.read()
    if name in before:
        bc=int(re.findall(">https://blog.csdn.net/u011659379/article/details/%scount:(\d+)"%name,before)[0])
        count=bc+1
        after=before.replace(">https://blog.csdn.net/u011659379/article/details/%scount:%d"%(name,bc),">https://blog.csdn.net/u011659379/article/details/%scount:%d"%(name,count))
    else:
        print 'new'*160
        after=before+'\nhttps://blog.csdn.net/u011659379/article/details/%scount:1'%(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='https://blog.csdn.net/u011659379/article/details/%s.html'%name
    filename2='index.html'
    file_handle=open(filename,'r')
    file_handle2=open(filename2,'r')
    bufsize=1024
    ftp.storbinary('STOR https://blog.csdn.net/u011659379/article/details/%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 = 'https://https://blog.csdn.net/u011659379/article/details/%s.tumblr.com/'
vhead = 'https://vt.tumblr.com/https://blog.csdn.net/u011659379/article/details/%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('https://https://blog.csdn.net/u011659379/article/details/%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:\nhttps://blog.csdn.net/u011659379/article/details/%s/https://blog.csdn.net/u011659379/article/details/%s.html \
                    \nand here is the home page:https://blog.csdn.net/u011659379/article/details/%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!\nhttps://t.cn/RGd6z2J \
            \nand here is the home page:https://blog.csdn.net/u011659379/article/details/%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!\nhttps://t.cn/RGd6z2J \
            \nand here is the home page:https://blog.csdn.net/u011659379/article/details/%s \"%website)
 
    return HttpResponse(response, content_type="application/xml")

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

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

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

网站配置部分

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

点击复制链接 与好友分享!回本站首页
上一篇:Python学习笔记(五)——OOP
下一篇:用Xocde搭建python开发环境
相关文章
图文推荐
文章
推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站