Skip to content

Commit

Permalink
Merge pull request #123 from lnalex/master
Browse files Browse the repository at this point in the history
Add Pocket support
  • Loading branch information
dtvd authored Aug 16, 2016
2 parents e449db3 + c1d510a commit 1dca9e2
Show file tree
Hide file tree
Showing 4 changed files with 98 additions and 3 deletions.
6 changes: 6 additions & 0 deletions docs/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -172,6 +172,8 @@ Here is full list of supported command:

- ``open 12`` will open url in tweet with *[id=12]* in your OS’s default browser.

- ``pt 12`` will add tweet with *[id=12]* in your Pocket list.

**Direct Messages Commands**

- ``inbox`` will show inbox messages. ``inbox 7`` will show newest 7 messages.
Expand Down Expand Up @@ -404,6 +406,8 @@ You also can view or set a new value of every config key by ``config`` command (
+ ``#recipient_name``: Message's recipient name
+ ``#recipient_nick``: Message's recipient screen name

- ``POCKET_SUPPORT`` : enable Pocket support.

In every format, you can use unicode characters like ``\u2665``.
Mac users also can use emoji characters as well (Ex: ``::zap::``).
See `Emoji cheatsheet`_ for details.
Expand All @@ -425,6 +429,7 @@ steps
# Consumer information
CONSUMER_KEY = 'APIKey' # Your Twitter application's API key
CONSUMER_SECRET = 'APISecret' # Your Twitter application's API secret
PCKT_CONSUMER_KEY = 'PocketAPIKey' # Your Pocket application's API key
- Use pip to install in local
Expand All @@ -450,3 +455,4 @@ steps
.. _Issue #10: https://github.com/DTVD/rainbowstream/issues/10
.. _default config: https://github.com/DTVD/rainbowstream/blob/master/rainbowstream/colorset/config
.. _Emoji cheatsheet: http://www.emoji-cheat-sheet.com/
.. _Pocket API: http://getpocket.com/developer/docs/overview
3 changes: 2 additions & 1 deletion rainbowstream/colorset/config
Original file line number Diff line number Diff line change
Expand Up @@ -63,5 +63,6 @@
"CLOCK_FORMAT" : "%Y/%m/%d %H:%M:%S",
"DISPLAY" : "\n #sender_name #sender_nick #to #recipient_name #recipient_nick :\n #clock message_id:#id\n #message"
}
}
},
"POCKET_SUPPORT": false
}
89 changes: 88 additions & 1 deletion rainbowstream/rainbow.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import pkg_resources
import socks
import socket
import re

from io import BytesIO
from twitter.stream import TwitterStream, Timeout, HeartbeatTimeout, Hangup
Expand All @@ -19,6 +20,8 @@
from twitter.oauth_dance import oauth_dance
from twitter.util import printNicely

from pocket import Pocket

from .draw import *
from .colors import *
from .config import *
Expand Down Expand Up @@ -137,6 +140,35 @@ def authen():
CONSUMER_SECRET)


def pckt_authen():
"""
Authenticate with Pocket OAuth
"""
pocket_credential = os.environ.get(
'HOME',
os.environ.get(
'USERPROFILE',
'')) + os.sep + '.rainbow_pckt_oauth'

if not os.path.exists(pocket_credential):
request_token = Pocket.get_request_token(consumer_key=PCKT_CONSUMER_KEY)
auth_url = Pocket.get_auth_url(code=request_token, redirect_uri="/")
webbrowser.open(auth_url)
printNicely(green("*** Press [ENTER] after authorization ***"))
raw_input()
user_credentials = Pocket.get_credentials(consumer_key=PCKT_CONSUMER_KEY, code=request_token)
access_token = user_credentials['access_token']
f = open(pocket_credential, 'w')
f.write(access_token)
f.close()
else:
with open(pocket_credential, 'r') as f:
access_token = str(f.readlines()[0])
f.close()

return Pocket(PCKT_CONSUMER_KEY, access_token)


def build_mute_dict(dict_data=False):
"""
Build muting list
Expand Down Expand Up @@ -250,6 +282,8 @@ def init(args):
c['IGNORE_LIST'] = []
# Mute dict
c['IGNORE_LIST'] += build_mute_dict()
# Pocket init
pckt = pckt_authen() if c['POCKET_SUPPORT'] else None


def trend():
Expand Down Expand Up @@ -426,6 +460,54 @@ def tweet():
t.statuses.update(status=g['stuff'])


def pocket():
"""
Add new link to Pocket along with tweet id
"""
if not c['POCKET_SUPPORT']:
printNicely(red('Pocket isn\'t enabled.'))
return

# Get tweet infos
p = pckt_authen()

t = Twitter(auth=authen())
try:
id = int(g['stuff'].split()[0])
tid = c['tweet_dict'][id]
except:
printNicely(red('Sorry I can\'t understand.'))
return

tweet = t.statuses.show(id=tid)

if len(tweet['entities']['urls']) > 0:
url = tweet['entities']['urls'][0]['expanded_url']
else:
url = "https://twitter.com/" + \
tweet['user']['screen_name'] + '/status/' + str(tid)

# Add link to pocket
try:
p.add(title=re.sub(r'(http:\/\/\S+)', r'', tweet['text']),
url=url,
tweet_id=tid)
except:
printNicely(red('Something is wrong about your Pocket account,'+ \
' please restart Rainbowstream.'))
pocket_credential = os.environ.get(
'HOME',
os.environ.get(
'USERPROFILE',
'')) + os.sep + '.rainbow_pckt_oauth'
if os.path.exists(pocket_credential):
os.remove(pocket_credential)
return

printNicely(green('Pocketed !'))
printNicely('')


def retweet():
"""
ReTweet
Expand Down Expand Up @@ -1436,7 +1518,7 @@ def config():
debug_option()
printNicely(red('Just can not set the key.'))
else:
printNicely(light_magenta('Sorry I can\'s understand.'))
printNicely(light_magenta('Sorry I can\'t understand.'))


def help_discover():
Expand Down Expand Up @@ -1512,6 +1594,8 @@ def help_tweets():
light_yellow('[id=12]') + ' in your OS\'s image viewer.\n'
usage += s * 2 + light_green('open 12') + ' will open url in tweet with ' + \
light_yellow('[id=12]') + ' in your OS\'s default browser.\n'
usage += s * 2 + light_green('pt 12') + ' will add tweet with ' + \
light_yellow('[id=12]') + ' in your Pocket list.\n'
printNicely(usage)


Expand Down Expand Up @@ -1814,6 +1898,7 @@ def reset():
'c',
'v',
'q',
'pt',
]

# Handle function set
Expand Down Expand Up @@ -1863,6 +1948,7 @@ def reset():
clear,
upgrade_center,
quit,
pocket,
]


Expand Down Expand Up @@ -1944,6 +2030,7 @@ def listen():
[], # clear
[], # version
[], # quit
[], # pocket
]
))
init_interactive_shell(d)
Expand Down
3 changes: 2 additions & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,8 @@
"pyfiglet",
"twitter",
"Pillow",
"PySocks"
"PySocks",
"pocket"
]

# Default user (considers non virtualenv method)
Expand Down

0 comments on commit 1dca9e2

Please sign in to comment.