Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import mechanize
- import BeautifulSoup as Bsoup
- LANGUAGE = {
- 'None': 1,
- '4CS': 142,
- '6502 ACME Cross Assembler': 143,
- '6502 Kick Assembler': 144,
- '6502 TASM/64TASS': 145,
- 'ABAP': 73,
- 'ActionScript': 2,
- 'ActionScript 3': 74,
- 'Ada': 3,
- 'ALGOL 68': 147,
- 'Apache Log': 4,
- 'AppleScript': 5,
- 'APT Sources': 75,
- 'ASM (NASM)': 6,
- 'ASP': 7,
- 'autoconf': 148,
- 'Autohotkey': 149,
- 'AutoIt': 54,
- 'Avisynth': 76,
- 'Awk': 150,
- 'BASCOM AVR': 198,
- 'Bash': 8,
- 'Basic4GL': 77,
- 'BibTeX': 78,
- 'Blitz Basic': 55,
- 'BNF': 56,
- 'BOO': 80,
- 'BrainFuck': 79,
- 'C': 9,
- 'C for Macs': 10,
- 'C Intermediate Language': 82,
- 'C#': 14,
- 'C++': 13,
- 'C++ (with QT extensions)': 154,
- 'C: Loadrunner': 199,
- 'CAD DCL': 11,
- 'CAD Lisp': 12,
- 'CFDG': 81,
- 'ChaiScript': 152,
- 'Clojure': 153,
- 'Clone C': 99,
- 'Clone C++': 100,
- 'CMake': 83,
- 'COBOL': 84,
- 'CoffeeScript': 200,
- 'ColdFusion': 15,
- 'CSS': 16,
- 'Cuesheet': 151,
- 'D': 17,
- 'DCS': 85,
- 'Delphi': 18,
- 'Delphi Prism (Oxygene)': 177,
- 'Diff': 19,
- 'DIV': 86,
- 'DOS': 20,
- 'DOT': 87,
- 'E': 155,
- 'ECMAScript': 156,
- 'Eiffel': 21,
- 'Email': 88,
- 'EPC': 201,
- 'Erlang': 57,
- 'F#': 158,
- 'Falcon': 202,
- 'FO Language': 89,
- 'Formula One': 157,
- 'Fortran': 22,
- 'FreeBasic': 23,
- 'FreeSWITCH': 206,
- 'GAMBAS': 159,
- 'Game Maker': 24,
- 'GDB': 160,
- 'Genero': 58,
- 'Genie': 161,
- 'GetText': 90,
- 'Go': 162,
- 'Groovy': 59,
- 'GwBasic': 163,
- 'Haskell': 60,
- 'HicEst': 164,
- 'HQ9 Plus': 93,
- 'HTML': 25,
- 'HTML 5': 196,
- 'Icon': 165,
- 'IDL': 94,
- 'INI file': 26,
- 'Inno Script': 61,
- 'INTERCAL': 95,
- 'IO': 96,
- 'J': 166,
- 'Java': 27,
- 'Java 5': 97,
- 'JavaScript': 28,
- 'jQuery': 167,
- 'KiXtart': 98,
- 'Latex': 62,
- 'Liberty BASIC': 168,
- 'Linden Scripting': 63,
- 'Lisp': 29,
- 'LLVM': 203,
- 'Loco Basic': 101,
- 'Logtalk': 169,
- 'LOL Code': 102,
- 'Lotus Formulas': 103,
- 'Lotus Script': 104,
- 'LScript': 105,
- 'Lua': 30,
- 'M68000 Assembler': 65,
- 'MagikSF': 170,
- 'Make': 106,
- 'MapBasic': 171,
- 'MatLab': 64,
- 'mIRC': 66,
- 'MIX Assembler': 172,
- 'Modula 2': 173,
- 'Modula 3': 107,
- 'Motorola 68000 HiSoft Dev': 146,
- 'MPASM': 32,
- 'MXML': 108,
- 'MySQL': 33,
- 'newLISP': 174,
- 'None': 1,
- 'NullSoft Installer': 34,
- 'Oberon 2': 109,
- 'Objeck Programming Langua': 175,
- 'Objective C': 35,
- 'OCalm Brief': 110,
- 'OCaml': 36,
- 'OpenBSD PACKET FILTER': 181,
- 'OpenGL Shading': 91,
- 'Openoffice BASIC': 37,
- 'Oracle 11': 111,
- 'Oracle 8': 38,
- 'Oz': 178,
- 'Pascal': 39,
- 'PAWN': 141,
- 'PCRE': 179,
- 'Per': 112,
- 'Perl': 40,
- 'Perl 6': 180,
- 'PHP': 41,
- 'PHP Brief': 113,
- 'Pic 16': 114,
- 'Pike': 182,
- 'Pixel Bender': 115,
- 'PL/SQL': 68,
- 'PostgreSQL': 183,
- 'POV-Ray': 116,
- 'Power Shell': 117,
- 'PowerBuilder': 184,
- 'ProFTPd': 197,
- 'Progress': 118,
- 'Prolog': 119,
- 'Properties': 120,
- 'ProvideX': 121,
- 'PureBasic': 185,
- 'PyCon': 204,
- 'Python': 42,
- 'q/kdb+': 186,
- 'QBasic': 43,
- 'R': 188,
- 'Rails': 67,
- 'REBOL': 122,
- 'REG': 123,
- 'Robots': 44,
- 'RPM Spec': 187,
- 'Ruby': 45,
- 'Ruby Gnuplot': 92,
- 'SAS': 124,
- 'Scala': 125,
- 'Scheme': 46,
- 'Scilab': 126,
- 'SdlBasic': 127,
- 'Smalltalk': 69,
- 'Smarty': 47,
- 'SQL': 48,
- 'SystemVerilog': 189,
- 'T-SQL': 130,
- 'TCL': 70,
- 'Tera Term': 128,
- 'thinBasic': 129,
- 'TypoScript': 131,
- 'Unicon': 191,
- 'UnrealScript': 195,
- 'Vala': 192,
- 'VB.NET': 51,
- 'VeriLog': 132,
- 'VHDL': 133,
- 'VIM': 134,
- 'Visual Pro Log': 135,
- 'VisualBasic': 50,
- 'VisualFoxPro': 52,
- 'WhiteSpace': 136,
- 'WHOIS': 137,
- 'Winbatch': 138,
- 'XBasic': 193,
- 'XML': 53,
- 'Xorg Config': 139,
- 'XPP': 140,
- 'YAML': 205,
- 'Z80 Assembler': 72,
- 'ZXBasic': 194,
- }
- EXPIRATION = {
- 'never': 'N',
- '10minutes': '10M',
- '1hour': '1H',
- '1day': '1D',
- '1month': '1M',
- }
- def getLanguage(name, matchCase = False):
- if not matchCase:
- name = name.lower()
- for k, v in LANGUAGE.iteritems():
- if k.lower() == name:
- return v
- else:
- return LANGUAGE[name]
- def getExpiration(type):
- return EXPIRATION[type]
- class LoginError(Exception):
- pass
- class PublicyError(Exception):
- pass
- class PasteError(Exception):
- def __init__(self, msg, link):
- super(PasteError, self).__init__(msg)
- self.link = link
- class PastebinCom(object):
- URL_LOGIN = 'http://pastebin.com/login.php'
- URL_PASTE = 'http://pastebin.com/'
- FORM_USERNAME = 'user_name'
- FORM_PASSWORD = 'user_password'
- FORM_PASTETXT = 'paste_code'
- FORM_PASTELNG = 'paste_format'
- FORM_PASTEEXP = 'paste_expire_date'
- FORM_PASTEPRV = 'paste_private'
- FORM_PASTENME = 'paste_name'
- def __init__(self):
- self.browser = mechanize.Browser()
- self.browser.set_cookiejar(mechanize.CookieJar())
- self.loggedIn = False
- self.formPaste = None
- def login(self, username, password):
- if self.loggedIn:
- return True
- pageLogin = self.browser.open(self.URL_LOGIN)
- formLogin = mechanize.ParseResponse(pageLogin)
- pageLogin.close()
- if len(formLogin) != 2:
- raise mechanize.URLError('Invalid forms recieved.')
- else:
- formLogin = formLogin[1]
- formLogin[self.FORM_USERNAME] = username
- formLogin[self.FORM_PASSWORD] = password
- pageLogin = formLogin.click()
- pageLogin = self.browser.open(pageLogin)
- import webbrowser as wb
- wb.open(pageLogin.geturl())
- # check for login validity
- soup = Bsoup.BeautifulSoup(pageLogin)
- errr = soup('div', {'id': 'error'})
- if errr:
- msg = errr[0].renderContents().strip()
- msg = msg.replace('<u>', '')
- msg = msg.replace('</u>', '')
- msg = msg.replace('\n', ' ')
- msg = msg.replace('Error:', '')
- raise LoginError(msg)
- self.loggedIn = True
- return True
- def paste(self, code, title = '', language = LANGUAGE['None'],
- expiration = EXPIRATION['never'], public = True):
- if isinstance(language, basestring):
- language = getLanguage(language)
- if EXPIRATION.has_key(expiration):
- expiration = EXPIRATION[expiration]
- """
- if not self.loggedIn:
- if not public:
- raise PublicyError('Cannot paste private without being logged in' \
- ' (requires captcha)')
- """
- formPaste = self.formPaste
- if not self.formPaste:
- pagePaste = self.browser.open(self.URL_PASTE)
- formPaste = mechanize.ParseResponse(pagePaste)
- pagePaste.close()
- if len(formPaste) != 2:
- raise mechanize.URLError('Invalid forms recieved.')
- else:
- formPaste = formPaste[1]
- self.formPaste = formPaste
- formPaste[self.FORM_PASTETXT] = code
- formPaste[self.FORM_PASTELNG] = [str(language)]
- formPaste[self.FORM_PASTEEXP] = [expiration]
- formPaste[self.FORM_PASTEPRV] = ['0' if public else '1']
- formPaste[self.FORM_PASTENME] = title
- pagePasted = formPaste.click()
- pagePasted = self.browser.open(pagePasted)
- # check if the paste was successful
- soup = Bsoup.BeautifulSoup(pagePasted)
- errr = soup('content_text')
- if errr:
- msg = errr[0].renderContents().strip()
- raise PasteError(msg, pagePasted.geturl())
- return pagePasted.geturl()
- def main():
- paste = PastebinCom()
- print "Logging into pastebin.com ...",
- try:
- paste.login('nux95', '04029595')
- print "Success !"
- except LoginError as (e):
- print "Failed:", "".join('\n ' + m for m in str(e).split('.'))
- with open(__file__) as fl:
- print paste.paste(fl.read(), 'pastebin.py', 'python', 'never', True)
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement