教程分为三个部分:
微信公众号部分
DigitalOcean服务器搭建部分
网站搭建部分
需要搭建一个像tumblr自助餐一样的微信公众号,自然需要申请一个微信公众号。具体过程不累述,可以直接到微信公众号主页申请一个个人订阅号即可。如果不想那么麻烦,也可以用到微信公众号测试平台,用微信登陆得到一个测试的微信公众号。
微信公众号部分未完,需要完成下面部分才能继续。
为了方便就是用微信公众号测试平台。微信登陆之后看到(初始状态接口配置信息是空白的,这里需要第二部创建了服务器才用到):
有了微信公众号,你还需要一个服务器才行。这里使用的是DigitalOcean服务器,其他平台自测。
到DigitalOcean注册页面注册一个账号。推荐直接点开我提供的链接进行注册,这样你就不用进行充值认证,账户上就有10美元,可以使用两个月。当然,一般注册之后需要进行充值5美元进行认证,具体认证过程可以看认证教程。有信用卡的可以使用信用卡,没有信用卡的可以使用paypal。
另外,如果你是学生的话,还可以去github申请一个学生包,然后有50美元的DigitalOcean优惠码。
注册并进行认证之后,下一步就是申请一个vps来。首先到这个页面然后点击右上角的Create Droplet。然后按照下面的选项进行选择。地区可以自己选,SSH key一开始是空白的。选好了之后就点击最下面的Create进行创建。
创建之后就会收到一封邮件,信息包括服务器ip、用户名、服务器初始密码。。
申请了vps服务器之后就需要配置了。首先需要下载Putty。
这里要说一下putty的使用说明:在putty打开服务器之后,点击鼠标右键就会复制你黏贴板的东西,然后选中putty的一段文字,该段文字就会复制到你的黏贴板。记住!
下载打开之后填入刚刚收到的服务器信息。打开之后显示安全提示,选是就可以。
之后就是login as: root
、[email protected]'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
进入编辑状态。
编辑django_project/urls.py,输入vi django_project/urls.py
,然后添加一行url(r'^$','wechat.views.index')
.如图.然后按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.py的website里面。
到这里教程完毕
付费搭建联系我QQ:920082975