-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpuff.py
More file actions
executable file
·128 lines (101 loc) · 3.33 KB
/
puff.py
File metadata and controls
executable file
·128 lines (101 loc) · 3.33 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#!/usr/bin/env python
#
# puff.py
# puff
#
# Post to Huffduffer from python.
#
# Created by Jay Roberts on 2011-04-25.
#
import os
import sys
import ConfigParser
from StringIO import StringIO
import mechanize
default_config = """
[huffduffer]
username = user
password = pass
"""
class Puffer(object):
"""Huffduffer API wrapper."""
def __init__(self, username = None, password = None):
self.username = ''
self.password = ''
self.logged_in = False
if username == None or password == None:
self.load_config()
else:
self.username = username
self.password = password
self.br = mechanize.Browser()
self.login()
def load_config(self):
# Load configuration
try:
config = ConfigParser.ConfigParser()
config.readfp(StringIO(default_config))
except ConfigParser.Error as cpe:
self.log('load_config(): %s' % cpe)
if os.path.isfile(os.environ["HOME"]+'/puff.ini'):
self.log('Found configuration, loading...')
try:
config.read(os.environ["HOME"]+'/puff.ini')
except ConfigParser.Error as cpe:
self.log('load_config(): %s' % cpe)
else:
try:
config_file = open('puff.ini', 'w')
config.write(config_file)
self.log('Default puff.ini created. Please edit and retry.')
exit()
except Exception as e:
self.log('load_config(): %s' % e)
finally:
config_file.close()
self.username = config.get('huffduffer', 'username')
self.password = config.get('huffduffer', 'password')
self.log('Loaded configuration')
def login(self):
if self.logged_in:
return
self.log('Logging in %s' % self.username)
self.br.open('http://huffduffer.com/login')
self.br.select_form(nr=1)
self.br['login[username]'] = self.username
self.br['login[password]'] = self.password
self.br.submit()
if (self.br.title() != 'Sign in on Huffduffer'):
self.log('Login succeeded for %s' % self.username)
self.logged_in = True
else:
self.log('Login failed for %s' % self.username)
def post(self, url, title, description):
if self.logged_in != True:
self.log('Must be logged in')
return
self.log('Puffing %s' % url)
self.br.open('http://huffduffer.com/add')
self.br.select_form(nr=1)
self.br['bookmark[url]'] = url
self.br['bookmark[title]'] = title
self.br['bookmark[description]'] = description
self.br.submit()
self.log('Puffed %s' % url)
return True
def log(self, message):
if __name__ == '__main__':
sys.stdout.write('%s\n' % message )
sys.stdout.flush()
def encoded_credentials(self):
return urllib.urlencode({'login[username]': self.username, 'login[password]': self.password})
if __name__ == '__main__':
try:
url = sys.argv[1]
title = sys.argv[2]
description = sys.argv[3]
except:
print 'Please specify a url to Puff, title and description'
exit()
puffer = Puffer()
puffer.post(url,title,description)