软件世界网 购物 网址 三丰软件 | 小说 美女秀 图库大全 游戏 笑话 | 下载 开发知识库 新闻 开发 图片素材
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
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年7日历
2018-7-23 0:42:45
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  软件世界网 --