V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
tinyfeng
V2EX  ›  Python

求助 SAE cron 定时发微博问题

  •  
  •   tinyfeng · 2013-08-17 17:03:11 +08:00 · 3901 次点击
    这是一个创建于 4108 天前的主题,其中的信息可能已经有所发展或是发生改变。
    使用廖雪峰的sdk, 能获取acces_token ,

    到这一句 r = client.statuses.update.post(status=u'测试') 就运行不下去了,

    本以为是ip的问题,已添加os.environ['REMOTE_ADDR'] = 'xxx.xx.16.49',还是没有解决问题

    求助,
    12 条回复    1970-01-01 08:00:00 +08:00
    strak47
        1
    strak47  
       2013-08-17 18:03:48 +08:00
    试试
    client.post.statuses__update(status=u'测试')
    tinyfeng
        2
    tinyfeng  
    OP
       2013-08-17 18:26:00 +08:00
    @strak47 还真的是。。 不过为什么在本地环境下为什么可以啊 还有,这两种区别是啥
    初学,不懂,烦请指教 谢谢
    strak47
        3
    strak47  
       2013-08-17 19:24:20 +08:00
    @tinyfeng 其实我也不知道=。=
    一开始我跟你一样,在sae试了好多次才发现这种方法。后来发现这种在本地也可以,所以一直用这种了。
    然后其他API用多了就有规律了,只要把api的斜杆替换成两个下划线就好了。
    比如 statuses/repost_timeline/ids 变成 statuses__repost_timeline__ids
    tinyfeng
        4
    tinyfeng  
    OP
       2013-08-17 19:50:51 +08:00
    @strak47 还是谢谢啊 看来得好好学习下 源码
    tinyfeng
        5
    tinyfeng  
    OP
       2013-08-17 19:59:51 +08:00
    @strak47 模拟登陆获取code, header里应该都加些啥进去 某段代码刚才还可以用,现在不行了诶

    postdata = {"client_id": APP_KEY,
    "redirect_uri": REDIRECT_URL,
    "userId": USERID,
    "passwd": PASSWD,
    "isLoginSina": "0",
    "action": "submit",
    "response_type": "code",
    }

    headers = { "User-Agent": "Mozilla/5.0 (Windows NT 6.1; rv:11.0) Gecko/20100101 Firefox/11.0",
    "Host": "api.weibo.com",
    "Referer": referer_url
    }

    req = urllib2.Request(
    url = AUTH_URL,
    data = urllib.urlencode(postdata),
    headers = headers
    )
    strak47
        6
    strak47  
       2013-08-18 01:50:11 +08:00
    @tinyfeng 能不能说下应用的基本情况,是自己开发着玩还是准备审核后为用户提供一个定时发微博的功能?
    如果是前者的话,那个token可以用很久的,人工获取一次后保存下来以后都可以用。
    应该不是后者吧,用户也不会给你密码。。

    其实我也没用过sae的cron功能,当时刚接触时也觉得要自动获取code太麻烦了,后来才注意到token是长期有效的。
    gzb1985
        7
    gzb1985  
       2013-08-18 10:39:11 +08:00
    token保存了没?token有效期一般一周左右,如果是测试者自身的帐号,则有效期非常长
    你是在cron响应路径做的授权获取token?如果是,这样不太恰当,因为授权需要一个回调过程。
    应该是专门的路径做好授权,保存好token(SAE中mysql和kvdb都可以),cron路径里获取该token,初始化client,然后调用对应api
    tinyfeng
        8
    tinyfeng  
    OP
       2013-08-18 12:10:37 +08:00
    @strak47 是自己试试的。 好像这个token有效期好像是24小时, 没学会怎么用数据库,再试试吧。 是不是因为我获取token太频繁,这个应用被限制了? 但人工获取code还是可以使用的
    tinyfeng
        9
    tinyfeng  
    OP
       2013-08-18 12:56:03 +08:00
    @gzb1985 没保存啊 都在cron的响应路径里获取的access_token。

    现在的问题是: 刚开始已经可以定时发送微博了, 但现在不行了。 因为获取不到code了,难道是因为我获取token太频繁? 但人工获取code还是可以发送微博的。

    这是我的代码https://github.com/avriler/TimingWeibo
    strak47
        10
    strak47  
       2013-08-18 16:43:12 +08:00
    @tinyfeng 不会的,自己帐号去授权自己创建的应用,有效期有五年那么久!
    你把这个token直接保存在代码里,比如 token='xxxxxx',不用数据库。 然后每次都拿这个token去发微博就好了。
    gzb1985
        11
    gzb1985  
       2013-08-18 22:27:56 +08:00
    第一次授权登录后获取到access_token,后续的操作仅用该token即可,code是授权登录过程中一个中间步骤。按照@strak47 的方式,把获取到的token写死在代码中也可。但不要在cron任务里做授权登录,这样没有必要,也很容易产生问题,说不定weibo对频繁授权会有限制。

    建议单独开一个路径来做授权登录。
    tinyfeng
        12
    tinyfeng  
    OP
       2013-08-18 23:39:45 +08:00 via Android
    @gzb1985
    @strak47

    十分感谢! 问题解决了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2814 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 366ms · UTC 02:29 · PVG 10:29 · LAX 18:29 · JFK 21:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.