软件世界网 购物 网址 三丰软件 | 小说 美女秀 图库大全 游戏 笑话 | 下载 开发知识库 新闻 开发 图片素材
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
移动开发 架构设计 编程语言 Web前端 互联网
开发杂谈 系统运维 研发管理 数据库 云计算 Android开发资料
  软件世界网 -> Web前端 -> 利用python搭建可以解析tumblr的微信公众号 -> 正文阅读

[Web前端]利用python搭建可以解析tumblr的微信公众号

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


教程分为三个部分:

  • 微信公众号部分

  • DigitalOcean服务器搭建部分

  • 网站搭建部分

微信公众号部分


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


DigitalOcean部分


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

申请DigitalOcean账号


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

开通DigitalOcean服务器


注册并进行认证之后,下一步就是申请一个vps来。首先到这个页面然后点击右上角的Create Droplet[img]http://acg.pics/uploads/2016/03/QQ%E6%88%AA%E5%9B%BE20160328210406.png。然后按照下面的选项进行选择[img]http://acg.pics/uploads/2016/03/DO.png。地区可以自己选,SSH key一开始是空白的。选好了之后就点击最下面的Create进行创建。
创建之后就会收到一封邮件,信息包括服务器ip用户名服务器初始密码。[img]http://acg.pics/uploads/2016/03/QQ%E6%88%AA%E5%9B%BE20160328211316.png。

配置服务器


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

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

下载打开之后填入刚刚收到的服务器信息[img]http://acg.pics/uploads/2016/03/1(70).png。打开之后显示安全提示[img]http://acg.pics/uploads/2016/03/2(43).png,选就可以。
之后就是login as: rootroot@xx.xx.xx.xx's password:这里输入初始密码,可以直接复制密码,然后点击鼠标右键密码就复制进去了。
[img]http://acg.pics/uploads/2016/03/3(29).png
第一次登陆服务器,会让你改密码。步骤是:

  1. 输入初始密码

  2. 输入自设密码

  3. 再次输入自设密码

如图:[img]http://acg.pics/uploads/2016/03/4(19).png
改完密码之后,分别复制粘贴下面的代码:

  • 切换目录: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!保存退出。如图[img]http://acg.pics/uploads/2016/03/5(14).png

  • 编辑django_project/urls.py,输入vi django_project/urls.py,然后添加一行url(r'^$','wechat.views.index').如图[img]http://i2.piimg.com/7f98241ad179e3d8.png.然后按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。[img]http://i2.piimg.com/72596424a357099b.png
点击提交,如果通过说明就没问题。

网站配置部分


网站我们选择3v免费空间,注册一个账号并登陆。到ftp管理查看ftp信息,然后把信息填到上面的tumblr.py。[img]http://i2.piimg.com/616df6e7a6c31c63.png
然后网站地址填到views.pywebsite里面。
到这里教程完毕
付费搭建联系我QQ:920082975
......显示全文...
    点击查看全文


上一篇文章      下一篇文章      查看所有文章
2016-03-29 22:59:18  
Web前端 最新文章
10分钟
SSM框架SSM项目源码SSM源码下载java框架整合
javascript入门
JavaScript常用对象Array(2)
8.Smarty3:模版中的内置函数
表单脚本
iTextSharp5.0页眉页脚及Asp.net预览的实现
MVC基础学习—理论篇
JavaScript
http协议中get与post区别详解
360图书馆 软件开发资料 文字转语音 购物精选 软件下载 新闻资讯 小游戏 Chinese Culture 股票 三丰软件 开发 中国文化 网文精选 阅读网 看图 日历 万年历 2018年12日历
2018-12-11 4:43:27
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  软件世界网 --