学了一周的 写了这些应用,得到了几位大牛的帮助,在此不提名感谢啦~

实现效果:
一.以为中心散布出去
二.必须要有ssh
三.读取然后散布
四.目前可以散布到饭否,
五.可以借鉴散布到豆瓣广播
六.可以把饭否有人@你id 发消息提示回

现在已经成为主力 IM + 提醒 + 应用 了,只开的客户端即可,以为中心散布出去,有实时提醒功能,比如大家可以利用twitterfeed.com之类的来做一个rss的订阅提醒,或者自己写一个的自动订阅更新提醒

待考虑功能:既然有就可以做出来一些功能
http://twitter.pbwiki.com/Bots
这有一些应用

前期准备
1.发消息到,需要 http://code.google.com/p/pyngfm/
2.需要以上版本 因为五 中 那个format代码实现的问题 lol 俺实在没啥好办法鸟

二.必须要有ssh
主要是用crontab的每隔多久执行一次程序的功能
我是用2分钟一次的,至今还没被饭否和封ip.
解决办法:
1.自己有机器挂着最好
2.如果有dreamhost账户的话,可以用dreamhost的ssh……不过小心被封……

四.发消息到饭否的代码
last.txt 需要手动建立,然后编辑添加某条消息的id值 这样以后更新只会更新至此,然后把最新的id写入last.txt

#!/usr/bin/
from .dom.minidom import parseString
import urllib2
import urllib
import sys
def post_to_fanfou(msg):
    url = 'http://.fanfou.com/statuses/update.'
    data = urllib.urlencode({'status':msg})
    req = urllib2.Request(url,data)
    username = 'jimey'
    password = 'password'
    passman = urllib2.HTTPPasswordMgrWithDefaultRealm()
    passman.add_password(None, url, username, password)
    authhandler = urllib2.HTTPBasicAuthHandler(passman)
    opener = urllib2.build_opener(authhandler)
    urllib2.install_opener(opener)
    response = urllib2.urlopen(req)
def main():
    f = open('last.txt','r')
    maxid = int(f.read())
    f.close()
    if maxid < 1166717326:
        print 'error'
        sys.exit(-1)
    params = urllib.urlencode({'since_id':maxid})
    url = ";http://.com/statuses/user_timeline/jimey.?%s";
    username = 'jimey'
    password = 'password'
    passman = urllib2.HTTPPasswordMgrWithDefaultRealm()
    passman.add_password(None, url, username, password)
    authhandler = urllib2.HTTPBasicAuthHandler(passman)
    opener = urllib2.build_opener(authhandler)
    urllib2.install_opener(opener)
    f = urllib2.urlopen(url % params)
    xmltext = f.read()
    dom = parseString(xmltext)
    statuses = dom.childNodes[0]
    messages = []
    s = 0
    for node in statuses.childNodes:
        if node.nodeName == 'status':
            status = node
            for snode in status.childNodes:
                if snode.nodeName == 'id':
                    n = int(snode.childNodes[0].nodeValue)
                    if n > maxid:
                        maxid = n
                elif snode.nodeName == 'text' and snode.childNodes[0].nodeValue[0:2] != 'RT' and snode.childNodes[0].nodeValue[0] != '@':
                    messages.append(snode.childNodes[0].nodeValue.encode('utf-8'))
    while len(messages) > 0:
        post_to_fanfou(messages.pop())
        s = s + 1
    f = open('last.txt','w')
    f.write(str(maxid))
    f.close()
if __name__ == ";__main__";:
    main() 

四.2 发消息到饭否+的代码

需要在申请2个 KEY  分别是

pfm.setApiKey(‘************************’)  = Application Key

pfm.setUserAppKey(‘*********************************’) = own Application Key.

#!/usr/bin/
from .dom.minidom import parseString
import urllib2
import urllib
import sys
from pyngfm import PyngFM 

def post_to_fanfou(msg):
    pfm = PyngFM() 

    pfm.setApiKey('************************')
    pfm.setUserAppKey('*********************************') 

    pfm.user_post('default','%s'%msg)
    url = 'http://.fanfou.com/statuses/update.'
    data = urllib.urlencode({'status':msg})
    req = urllib2.Request(url,data)
    username = 'jimey'
    password = 'password'
    passman = urllib2.HTTPPasswordMgrWithDefaultRealm()
    passman.add_password(None, url, username, password)
    authhandler = urllib2.HTTPBasicAuthHandler(passman)
    opener = urllib2.build_opener(authhandler)
    urllib2.install_opener(opener)
    response = urllib2.urlopen(req)
def main():
    f = open('last.txt','r')
    maxid = int(f.read())
    f.close()
    if maxid < 1166717326:
        print 'error'
        sys.exit(-1)
    params = urllib.urlencode({'since_id':maxid})
    url = ";http://.com/statuses/user_timeline/jimey.?%s";
    username = 'jimey'
    password = 'password'
    passman = urllib2.HTTPPasswordMgrWithDefaultRealm()
    passman.add_password(None, url, username, password)
    authhandler = urllib2.HTTPBasicAuthHandler(passman)
    opener = urllib2.build_opener(authhandler)
    urllib2.install_opener(opener)
    f = urllib2.urlopen(url % params)
    xmltext = f.read()
    dom = parseString(xmltext)
    statuses = dom.childNodes[0]
    messages = []
    s = 0
    for node in statuses.childNodes:
        if node.nodeName == 'status':
            status = node
            for snode in status.childNodes:
                if snode.nodeName == 'id':
                    n = int(snode.childNodes[0].nodeValue)
                    if n > maxid:
                        maxid = n
                elif snode.nodeName == 'text' and snode.childNodes[0].nodeValue[0:2] != 'RT' and snode.childNodes[0].nodeValue[0] != '@':
                    messages.append(snode.childNodes[0].nodeValue.encode('utf-8'))
    while len(messages) > 0:
        post_to_fanfou(messages.pop())
        s = s + 1
    f = open('last.txt','w')
    f.write(str(maxid))
    f.close()
if __name__ == ";__main__";:
    main() 

五 . 发消息到豆瓣广播

http://www.douban.com/group/topic/4604950/

六.如果有人在饭否回复你,在注册个马甲帐号然后把饭否回复人的id和饭否回复的内容一块发到去,由于你真身帐号已经加了这个马甲帐号的好友,所以在那马甲帐号发消息的时候会有 @饭否id  如果你饭否id和的id是一样的话,比如我用twhirl会有声音提示,如果含有@id 这样的消息出现的话

#!/usr/bin/
# -*- coding: utf-8 -*-
'''
Created on 2009-4-2
@author: jimey
'''
from .dom.minidom import parseString
import urllib2
import urllib
import sys
import 
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
def main():
    f = open('/home/jimey/fanfou/fanfoulast.txt','r')
    maxid = str(f.read())
    params = urllib.urlencode({'since_id':maxid})
    url = ";http://.fanfou.com/statuses/replies.?%s";
    username = 'jimey'
    password = 'password'
    passman = urllib2.HTTPPasswordMgrWithDefaultRealm()
    passman.add_password(None, url, username, password)
    authhandler = urllib2.HTTPBasicAuthHandler(passman)
    opener = urllib2.build_opener(authhandler)
    urllib2.install_opener(opener)
    f = urllib2.urlopen(url % params)
    xmltext = f.read()
    dom = parseString(xmltext)
    statuses = dom.childNodes[0]
    id = []
    messages = []
    name = []
    content = []
    for node in statuses.childNodes:
        if node.nodeName == 'status':
            status = node
            for snode in status.childNodes:
                if snode.nodeName == 'id':
                   id.append(snode.childNodes[0].nodeValue)
                elif snode.nodeName == 'text':
                    messages.append(snode.childNodes[0].nodeValue)
                elif snode.nodeName == 'user':
                   for unode in snode.childNodes:
                     if unode.nodeName == 'name':
                          name.append(unode.childNodes[0].nodeValue)
    for q, a in zip(name,messages):
      content.append('{0} says {1}'.format(q,a))
    while len(content) > 0:
        = .(username='jimeybot', password='password')
       status = .PostUpdate(";%s"; %content.pop())
       f = open('fanfoulast.txt','w')
       print id
       maxid = id[0]
       f.write(str(maxid))
       f.close()
if __name__ == ";__main__";:
    main() 
标签:, , , , , , , , , , , ,

相关日志


相关博文

2 条评论

  1. 有了 cron job 支持之后 Google App Engine 似乎是个比 dreamhost 更加好的选择了
    至少 GAE 要比 dreamhost 更加稳定吧
    不过 GAE 的 python 似乎有些限制 不知道具体能否实现~

    回复本留言

    jimey Reply:

    暂时我自己的机器还是比较稳定的

    top – 13:02:19 up 29 days, 11:20, 3 users, load average: 2.00, 2.00, 2.00

    GAE上应该是是可以实现的

    可以参考豆瓣那个 http://www.douban.com/group/topic/4604950/ 只是好像缺了conf.py ……我运行GAE直接500错误…

    由于那个代码貌似是记录log的……所以想来想去,还是自己写一个豆瓣的Oauth然后继续在这个python上一块更新好了

    回复本留言

Post comment

comment has COPYRIGHT too!