Skip to content

Commit d8415e8

Browse files
committed
first commit
0 parents  commit d8415e8

File tree

9 files changed

+484
-0
lines changed

9 files changed

+484
-0
lines changed

.gitignore

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
# standard
2+
*~
3+
*.pyc
4+
*.pyo
5+
*.mo
6+
*.log
7+
*.pid
8+
*.egg-info
9+
.coverage
10+
.DS_Store
11+
dist/

README.rst

Whitespace-only changes.

pastebin_python/__init__.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
from pastebin import PastebinPython
2+
3+
__version__ = "1.0"
4+
__app_name__ = "pastebin_python"
5+
__description__ = "A complete pastebin.com API wrapper for Python"
6+
__author__ = "Ferdinand Silva"
7+
__author_email__ = "[email protected]"
8+
__app_url__ = "http://ferdinandsilva.com"
9+
__download_url__ = "https://github.com/six519/PastebinPython"

pastebin_python/pastebin.py

Lines changed: 195 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,195 @@
1+
import re, urllib2, urllib
2+
from xml.dom.minidom import parseString
3+
4+
from pastebin_options import OPTION_PASTE, OPTION_LIST, \
5+
OPTION_TRENDS, OPTION_DELETE, \
6+
OPTION_USER_DETAILS
7+
8+
from pastebin_constants import PASTEBIN_API_POST_URL, PASTEBIN_API_LOGIN_URL
9+
from pastebin_exceptions import PastebinBadRequestException, PastebinNoPastesException, \
10+
PastebinFileException
11+
12+
class PastebinPython(object):
13+
14+
def __init__(self, **kwargs):
15+
16+
self.api_dev_key = kwargs.get('api_dev_key','')
17+
self.__api_user_key = ""
18+
self.__api_user_paste_list = []
19+
20+
@property
21+
def api_user_key(self):
22+
return self.__api_user_key
23+
24+
@property
25+
def api_user_paste_list(self):
26+
return self.__api_user_paste_list
27+
28+
def createPaste(self, api_paste_code, api_paste_name='', api_paste_format='', api_paste_private='', api_paste_expire_date=''):
29+
30+
api_user_key = self.api_user_key if self.api_user_key else ""
31+
32+
postData = {
33+
'api_option':OPTION_PASTE,
34+
'api_dev_key':self.api_dev_key
35+
}
36+
37+
localVar = locals()
38+
39+
for k,v in localVar.items():
40+
if re.search('^api_', k) and v != "":
41+
postData[k] = v
42+
43+
return self.__processPost(PASTEBIN_API_POST_URL, postData)
44+
45+
def createPasteFromFile(self, filename, api_paste_name='', api_paste_format='', api_paste_private='', api_paste_expire_date=''):
46+
47+
try:
48+
fileToOpen = open(filename, 'r')
49+
fileToPaste = fileToOpen.read()
50+
fileToOpen.close()
51+
52+
return self.createPaste(fileToPaste, api_paste_name, api_paste_format, api_paste_private, api_paste_expire_date)
53+
except IOError as e:
54+
raise PastebinFileException(str(e))
55+
56+
57+
def __processPost(self, url, data):
58+
59+
request = urllib2.urlopen(url, urllib.urlencode(data))
60+
response = str(request.read())
61+
request.close()
62+
63+
if re.search('^Bad API request', response):
64+
raise PastebinBadRequestException(response)
65+
elif re.search('^No pastes found', response):
66+
raise PastebinNoPastesException
67+
68+
return response
69+
70+
def getUserKey(self, api_user_name, api_user_password):
71+
72+
postData = {
73+
'api_dev_key':self.api_dev_key,
74+
'api_user_name':api_user_name,
75+
'api_user_password':api_user_password
76+
}
77+
78+
self.__api_user_key = self.__processPost(PASTEBIN_API_LOGIN_URL, postData)
79+
self.__api_user_paste_list = []
80+
return self.__api_user_key
81+
82+
def listUserPastes(self, api_results_limit=50):
83+
84+
postData = {
85+
'api_dev_key':self.api_dev_key,
86+
'api_user_key': self.api_user_key,
87+
'api_results_limit': api_results_limit,
88+
'api_option':OPTION_LIST
89+
}
90+
91+
pastesList = self.__processPost(PASTEBIN_API_POST_URL, postData)
92+
self.__api_user_paste_list = self.__parseXML(pastesList)
93+
94+
return self.__api_user_paste_list
95+
96+
def listTrendingPastes(self):
97+
98+
postData = {
99+
'api_dev_key':self.api_dev_key,
100+
'api_option':OPTION_TRENDS
101+
}
102+
103+
trendsList = self.__processPost(PASTEBIN_API_POST_URL, postData)
104+
trendsList = self.__parseXML(trendsList)
105+
106+
return trendsList
107+
108+
def __parseUser(self, xmlString):
109+
retList = []
110+
userElements = xmlString.getElementsByTagName('user')
111+
112+
retList.append({
113+
'user_name':userElements[0].getElementsByTagName('user_name')[0].childNodes[0].nodeValue,
114+
'user_format_short':userElements[0].getElementsByTagName('user_format_short')[0].childNodes[0].nodeValue,
115+
'user_expiration':userElements[0].getElementsByTagName('user_expiration')[0].childNodes[0].nodeValue,
116+
'user_avatar_url':userElements[0].getElementsByTagName('user_avatar_url')[0].childNodes[0].nodeValue,
117+
'user_private':userElements[0].getElementsByTagName('user_private')[0].childNodes[0].nodeValue,
118+
'user_website':userElements[0].getElementsByTagName('user_website')[0].childNodes[0].nodeValue,
119+
'user_email':userElements[0].getElementsByTagName('user_email')[0].childNodes[0].nodeValue,
120+
'user_location':userElements[0].getElementsByTagName('user_location')[0].childNodes[0].nodeValue,
121+
'user_account_type':userElements[0].getElementsByTagName('user_account_type')[0].childNodes[0].nodeValue
122+
})
123+
124+
return retList
125+
126+
def __parsePaste(self, xmlString):
127+
retList = []
128+
pasteElements = xmlString.getElementsByTagName('paste')
129+
130+
for pasteElement in pasteElements:
131+
132+
try:
133+
paste_title = pasteElement.getElementsByTagName('paste_title')[0].childNodes[0].nodeValue
134+
except IndexError:
135+
paste_title = ""
136+
137+
retList.append({
138+
'paste_title':paste_title,
139+
'paste_key':pasteElement.getElementsByTagName('paste_key')[0].childNodes[0].nodeValue,
140+
'paste_date':pasteElement.getElementsByTagName('paste_date')[0].childNodes[0].nodeValue,
141+
'paste_size':pasteElement.getElementsByTagName('paste_size')[0].childNodes[0].nodeValue,
142+
'paste_expire_date':pasteElement.getElementsByTagName('paste_expire_date')[0].childNodes[0].nodeValue,
143+
'paste_private':pasteElement.getElementsByTagName('paste_private')[0].childNodes[0].nodeValue,
144+
'paste_format_long':pasteElement.getElementsByTagName('paste_format_long')[0].childNodes[0].nodeValue,
145+
'paste_format_short':pasteElement.getElementsByTagName('paste_format_short')[0].childNodes[0].nodeValue,
146+
'paste_url':pasteElement.getElementsByTagName('paste_url')[0].childNodes[0].nodeValue,
147+
'paste_hits':pasteElement.getElementsByTagName('paste_hits')[0].childNodes[0].nodeValue,
148+
})
149+
150+
return retList
151+
152+
153+
def __parseXML(self, xml, isPaste=True):
154+
retList = []
155+
xmlString = parseString("<pasteBin>%s</pasteBin>" % xml)
156+
157+
if isPaste:
158+
retList = self.__parsePaste(xmlString)
159+
else:
160+
retList = self.__parseUser(xmlString)
161+
162+
return retList
163+
164+
165+
def deletePaste(self, api_paste_key):
166+
postData = {
167+
'api_dev_key':self.api_dev_key,
168+
'api_user_key':self.api_user_key,
169+
'api_paste_key':api_paste_key,
170+
'api_option':OPTION_DELETE
171+
}
172+
173+
try:
174+
retMsg = self.__processPost(PASTEBIN_API_POST_URL, postData)
175+
except PastebinBadRequestException as e:
176+
retMsg = str(e)
177+
178+
if re.search('^Paste Removed', retMsg):
179+
return True
180+
181+
return False
182+
183+
184+
def getUserInfos(self):
185+
186+
postData = {
187+
'api_dev_key':self.api_dev_key,
188+
'api_user_key':self.api_user_key,
189+
'api_option':OPTION_USER_DETAILS
190+
}
191+
192+
retData = self.__processPost(PASTEBIN_API_POST_URL, postData)
193+
retData = self.__parseXML(retData, False)
194+
195+
return retData

pastebin_python/pastebin_constants.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
PASTEBIN_API_URL = "http://pastebin.com/api/"
2+
PASTEBIN_API_POST_URL = "%s%s" % (PASTEBIN_API_URL, "api_post.php")
3+
PASTEBIN_API_LOGIN_URL = "%s%s" % (PASTEBIN_API_URL, "api_login.php")
4+
5+
PASTE_PUBLIC = 0
6+
PASTE_UNLISTED = 1
7+
PASTE_PRIVATE = 2
8+
9+
EXPIRE_NEVER = "N"
10+
EXPIRE_10_MIN = "10M"
11+
EXPIRE_1_HOUR = "1H"
12+
EXPIRE_1_DAY = "1D"
13+
EXPIRE_1_MONTH = "1M"
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
class PastebinBadRequestException(Exception):
2+
pass
3+
4+
class PastebinNoPastesException(Exception):
5+
pass
6+
7+
class PastebinFileException(Exception):
8+
pass

0 commit comments

Comments
 (0)