照葫芦画蟒蛇

starting python on google app engine
1.BirdNest  http://code.google.com/p/birdnest/
推特收购了Tweetie并发布免费版,支持API。被逼自己动手搭,结果却出乎意料地简单。网上教程很多,比如最近在风口浪尖上的月光的教程,遵循这个步骤下去,deploy的过程很顺利,但是却用不了,经由 @ggarlic老湿指点,在项目Google Code的 Issue14里发现了如下修改方法。

自建Google APE出错的解决方案
1、
下载Google APE源码的地址是:
http://birdnest.googlecode.com/svn/branches/gae
而不是:
http://birdnest.googlecode.com/svn/trunk/(不要用这个)

2、
如若你的code.py文件中,第82-91行为下列内容,请把这些内容删除:

    import socket
    import re
    ua = web.ctx.environ.get("HTTP_USER_AGENT", 'None')
    if ua.find('jibjib') >= 0:
      socket.setdefaulttimeout(60)

    elif ua.find('zh-CN') >= 0:
      #raise Exception('unknown error')
      socket.setdefaulttimeout(2)
    else:
      socket.setdefaulttimeout(2)

再试,可以了。

2.GAppProxy http://code.google.com/p/gappproxy/
目前使用其Windows客户端,并添加为系统服务,FF下配合AutoProxy使用,基本感觉不到墙的存在了。
问题1:twitter能打开但无法登陆。 – 用此版本替换,问题解决。
问题2:YouTube等视频网站能打开,但连接错误。 – 待搞
问题3:经常弹出提示证书无法识别。 – 待搞

3.虾米自动签到
参照VeryCD自动灌水脚本,改写了个虾米自动签到脚本。
app.yaml:

application: xiami #此处修改为自己的app名称
version: 1
runtime: python
api_version: 1

handlers:
- url: /sign
script: sign.py

cron.yaml

cron:
- description: daily sign job
url:  /sign
schedule: every 6 hours
timezone: Asia/Chongqing

sign.py

#!/usr/bin/env python
#coding:utf-8
#author:sourbell
#http://sourbell.im

import urllib2,urllib,httplib,cookielib
email = 'i@sourbell.im'  #改成自己的用户名
passwd = 'password' #改成自己的密码

def login():
    '''这个就是登录脚本'''
    print 'try to login...'

    #登录需要准备cookie
    cookie=cookielib.CookieJar()
    opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie), urllib2.HTTPHandler)
    urllib2.install_opener(opener)

    #现在填表
    postdata=urllib.urlencode({'email':email,
        'password':passwd,
        'submit':'登录',

    })
    req = urllib2.Request(
        url = 'http://www.xiami.com/member/login',
        data = postdata
    )

    #填header,伪装成正常浏览访问,这是一种写法,也可以用我之前那篇文章的写法,更有条理一点
    req.add_header('User-Agent','Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6')
    req.add_header('Accept','text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8')
    req.add_header('Accept-Encoding','gzip,deflate')

    #交登录表,然后就登录成功了
    print '...login form submitted'
    result = urllib2.urlopen(req).read()
    print '...login succeed!'

def sign():
    url = 'http://www.xiami.com/task/sign'
    request = urllib2.Request(url)
    response = urllib2.urlopen(request)
    print '...sign succeed!'

if __name__ == '__main__':
    login()
    sign()

1:没有技术含量的改写,有错误也难免。此签到功能只要打开某网址就可以了,以后应该会改掉吧。因为涉及到密码,所以还是单帐号比较好。
2:SDUpload无法上传cron计划任务配置文件,必须用GAE的 [appcfg.py update 目录名]。
3:原本安装了Python3.1,后来发现不仅print这些函数变了,很多lib比如urllib、urllib2都转到test下去了,嫌麻烦又换回了2.6。
4:原本以为模拟点击按钮需要使用PAM30,结果用了才知道那是实际打开一个IE来模拟点击了。并且使用PAM必须先安装此扩展

, , ,

有 2 条《照葫芦画蟒蛇》的回复

  1. ggarlic | #1

    呃,今天砌墙工人封了GAE的https,只留下了http :shock:

    虾米自动签到是个好东西,我也试试去 :lol:

    • 还真被咔嚓了,NND
      你可以把schedule: every 6 hours 改成schedule: every 1 minutes来测试,如果成功后台Cron Jobs里会有succeed :lol:

发表评论