mirror of
https://github.com/twisterarmy/feed2twister.git
synced 2025-02-01 01:24:21 +00:00
Added patched bitcoin-rpc submodule
You should do "git submodule update --init"!!!
This commit is contained in:
parent
d9db5b4296
commit
19a248debd
3
.gitmodules
vendored
Normal file
3
.gitmodules
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
[submodule "dependencies/python-bitcoinrpc"]
|
||||||
|
path = dependencies/python-bitcoinrpc
|
||||||
|
url = https://github.com/thedod/python-bitcoinrpc.git
|
10
README.md
10
README.md
@ -8,11 +8,17 @@ Feed2twister is a simple script to post items from RSS/ATOM feeds to [Twister](h
|
|||||||
|
|
||||||
### Installing
|
### Installing
|
||||||
|
|
||||||
Copy `config-example.py` to `config.py` and edit it to taste.
|
* run `git submodule update --init`
|
||||||
|
(to install a [patched version](https://github.com/thedod/python-bitcoinrpc/tree/unicode-fix-for-twister)
|
||||||
|
of bitcoin-rpc (a twister-related unicode fix).
|
||||||
|
If you don't have git(?) you can [download the zip](https://github.com/thedod/python-bitcoinrpc/archive/unicode-fix-for-twister.zip),
|
||||||
|
and copy the bitcoinrpc directory into this directory (overwrite whatever you have ther now. probably an empty folder).
|
||||||
|
|
||||||
|
* Copy `config-example.py` to `config.py` and edit it to taste.
|
||||||
|
|
||||||
### Running
|
### Running
|
||||||
|
|
||||||
Normally, you would run this as a cron task: `python feed2twister.py` [`N`]
|
Normally, you would run this as a cron task: `cd /path/to/this ; python feed2twister.py` [`N`]
|
||||||
|
|
||||||
if [optional] `N` is supplied, it's used as the maximum items to post (per feed). Default is `conf.MAX_NEW_ITEMS_PER_FEED`.
|
if [optional] `N` is supplied, it's used as the maximum items to post (per feed). Default is `conf.MAX_NEW_ITEMS_PER_FEED`.
|
||||||
|
|
||||||
|
1
bitcoinrpc
Symbolic link
1
bitcoinrpc
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
dependencies/python-bitcoinrpc/bitcoinrpc
|
1
dependencies/python-bitcoinrpc
vendored
Submodule
1
dependencies/python-bitcoinrpc
vendored
Submodule
@ -0,0 +1 @@
|
|||||||
|
Subproject commit 666d96a2ceadf173f8099ae08ebf5eb831c16312
|
@ -2,6 +2,22 @@ from conf import *
|
|||||||
import feedparser,anydbm,sys
|
import feedparser,anydbm,sys
|
||||||
from bitcoinrpc.authproxy import AuthServiceProxy
|
from bitcoinrpc.authproxy import AuthServiceProxy
|
||||||
|
|
||||||
|
### truncated_utf8() is based on http://stackoverflow.com/a/13738452
|
||||||
|
def _is_utf8_lead_byte(b):
|
||||||
|
'''A UTF-8 intermediate byte starts with the bits 10xxxxxx.'''
|
||||||
|
return (ord(b) & 0xC0) != 0x80
|
||||||
|
|
||||||
|
def truncated_utf8(text,max_bytes,ellipsis='\xe2\x80\xa6'):
|
||||||
|
'''If text[max_bytes] is not a lead byte, back up until a lead byte is
|
||||||
|
found and truncate before that character.'''
|
||||||
|
utf8 = text.encode('utf8')
|
||||||
|
if len(utf8) <= max_bytes:
|
||||||
|
return utf8
|
||||||
|
i = max_bytes-len(ellipsis)
|
||||||
|
while i > 0 and not _is_utf8_lead_byte(utf8[i]):
|
||||||
|
i -= 1
|
||||||
|
return utf8[:i]+ellipsis
|
||||||
|
|
||||||
def get_next_k(twister,username):
|
def get_next_k(twister,username):
|
||||||
try:
|
try:
|
||||||
return twister.getposts(1,[{'username':username}])[0]['userpost']['k']+1
|
return twister.getposts(1,[{'username':username}])[0]['userpost']['k']+1
|
||||||
@ -26,7 +42,9 @@ def main(max_items):
|
|||||||
msg = msg[:137]+u'...'
|
msg = msg[:137]+u'...'
|
||||||
else: # Link too long. Not enough space left for text :(
|
else: # Link too long. Not enough space left for text :(
|
||||||
msg = ''
|
msg = ''
|
||||||
db[eid] = msg.encode('utf8') # Anydbm can't do unicode. utf8 may become >140, but it doesn't matter ;)
|
utfmsg = truncated_utf8(msg,140)# limit is 140 utf-8 bytes (not chars)
|
||||||
|
msg = unicode(utfmsg,'utf-8') # AuthServiceProxy needs unicode [we just needed to know where to truncate, and that's utf-8]
|
||||||
|
db[eid] = utfmsg # anydbm, on the other hand, can't handle unicode, so it's a good thing we've also kept the utf-8 :)
|
||||||
if not msg: # We've marked it as "posted", but no sense really posting it.
|
if not msg: # We've marked it as "posted", but no sense really posting it.
|
||||||
logging.warn(u'Link too long at {0}'.format(eid))
|
logging.warn(u'Link too long at {0}'.format(eid))
|
||||||
continue
|
continue
|
||||||
@ -36,8 +54,8 @@ def main(max_items):
|
|||||||
logging.info(u'posting {0}'.format(msg))
|
logging.info(u'posting {0}'.format(msg))
|
||||||
try:
|
try:
|
||||||
twister.newpostmsg(USERNAME,get_next_k(twister,USERNAME),msg)
|
twister.newpostmsg(USERNAME,get_next_k(twister,USERNAME),msg)
|
||||||
except Exception,e: # To do: find out why some unicode chars screw this and how to do this "right"
|
except Exception,e:
|
||||||
logging.error(`e`)
|
logging.error(`e`) # usually not very informative :(
|
||||||
n_items+=1
|
n_items+=1
|
||||||
|
|
||||||
if __name__=='__main__':
|
if __name__=='__main__':
|
||||||
|
Loading…
x
Reference in New Issue
Block a user