Miguel Freitas
11 years ago
1 changed files with 91 additions and 0 deletions
@ -0,0 +1,91 @@
@@ -0,0 +1,91 @@
|
||||
#!/usr/bin/python |
||||
# |
||||
# posts_sync.py example script to post from html page |
||||
|
||||
import sys, cPickle, time, urllib2 |
||||
from pyquery import PyQuery |
||||
|
||||
reload(sys) |
||||
sys.setdefaultencoding("utf-8") |
||||
|
||||
try: |
||||
from bitcoinrpc.authproxy import AuthServiceProxy |
||||
except ImportError as exc: |
||||
sys.stderr.write("Error: install python-bitcoinrpc (https://github.com/jgarzik/python-bitcoinrpc)\n") |
||||
exit(-1) |
||||
|
||||
### options parsing |
||||
|
||||
from optparse import OptionParser |
||||
parser = OptionParser("usage: %prog [options] <page_url> <username>") |
||||
parser.add_option("-s", "--serverUrl", |
||||
action="store", dest="serverUrl", default="http://user:pwd@127.0.0.1:28332", |
||||
help="connect to specified twisterd server URL") |
||||
parser.add_option("-p", "--proxyUrl", |
||||
action="store", dest="proxyUrl", default="", |
||||
help="proxyUrl to use") |
||||
parser.add_option("-d", action="store_true", dest="dryRun", |
||||
help="dry-run, just report posts") |
||||
|
||||
(options, args) = parser.parse_args() |
||||
if len(args) != 2: |
||||
parser.error("incorrect number of arguments") |
||||
|
||||
pageUrl = args[0] |
||||
username = args[1] |
||||
|
||||
### connect to twisterd |
||||
|
||||
twister = AuthServiceProxy(options.serverUrl) |
||||
lastK = -1 |
||||
lastUserPost = twister.getposts(1, [{"username":username}]) |
||||
for i in range(len(lastUserPost)): |
||||
if lastUserPost[i]["userpost"]["n"] == username: |
||||
lastK = int(lastUserPost[i]["userpost"]["k"]) |
||||
break |
||||
print username, "lastK:", lastK |
||||
|
||||
### load db from previous run |
||||
|
||||
dbFileName = username + ".pickle" |
||||
class MyDb: |
||||
lastDatatime = 0 |
||||
try: |
||||
db = cPickle.load(open(dbFileName)) |
||||
except: |
||||
db = MyDb() |
||||
|
||||
### setup proxy |
||||
|
||||
if len(options.proxyUrl): |
||||
proxy = urllib2.ProxyHandler({'http': options.proxyUrl,'https': options.proxyUrl}) |
||||
opener = urllib2.build_opener(proxy) |
||||
urllib2.install_opener(opener) |
||||
|
||||
### download html content |
||||
|
||||
user_agent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.73.11 (KHTML, like Gecko) Version/7.0.1 Safari/537.73.11' |
||||
headers = { 'User-Agent' : user_agent } |
||||
req = urllib2.Request(pageUrl, headers = headers) |
||||
response = urllib2.urlopen(req) |
||||
html = response.read() |
||||
pq = PyQuery(html.decode('utf8')) |
||||
|
||||
### parse html |
||||
|
||||
items = pq(".content") |
||||
for i in xrange(len(items)-1,0,-1): |
||||
item = items.eq(i) |
||||
datatime = int(item.find("[data-time]").attr("data-time")) |
||||
if datatime > db.lastDatatime : |
||||
db.lastDatatime = datatime |
||||
p = item.find("p") |
||||
ptext = p.text() |
||||
ptext = ptext.replace(":// ","://").replace("# ","#").replace("@ ","@") |
||||
print "newpostmsg", username, lastK+1, ptext |
||||
if not options.dryRun: |
||||
twister.newpostmsg(username, lastK+1, ptext) |
||||
lastK = lastK+1 |
||||
|
||||
if not options.dryRun: |
||||
cPickle.dump(db,open(dbFileName,"w")) |
Loading…
Reference in new issue