python getelementbyid from string

Posted by matthewgall on Stack Overflow See other posts from Stack Overflow or by matthewgall
Published on 2011-01-15T13:45:24Z Indexed on 2011/01/15 13:54 UTC
Read the original article Hit count: 304

Filed under:
|
|

Hey,

I have the following program, that is trying to upload a file (or files) to an image upload site, however I am struggling to find out how to parse the returned HTML to grab the direct link (contained in a ).

I have the code below:

#!/usr/bin/python
# -*- coding: utf-8 -*-
import pycurl
import urllib
import urlparse
import xml.dom.minidom
import StringIO
import sys
import gtk
import os
import imghdr
import locale
import gettext
try:
 import pynotify
except:
 print "Please install pynotify."

APP="Uploadir Uploader"
DIR="locale"

locale.setlocale(locale.LC_ALL, '')
gettext.bindtextdomain(APP, DIR)
gettext.textdomain(APP)
_ = gettext.gettext

##STRINGS
uploading = _("Uploading image to Uploadir.")
oneimage = _("1 image has been successfully uploaded.")
multimages = _("images have been successfully uploaded.")
uploadfailed = _("Unable to upload to Uploadir.")

class Uploadir:
 def __init__(self, args):

  self.images = []
  self.urls = []
  self.broadcasts = []
  self.username=""
  self.password=""
  if len(args) == 1:
   return
  else:
   for file in args:
    if file == args[0] or file == "":
     continue
    if file.startswith("-u"):
     self.username = file.split("-u")[1]
     #print self.username
     continue
    if file.startswith("-p"):
     self.password = file.split("-p")[1]
     #print self.password
     continue
    self.type = imghdr.what(file)
    self.images.append(file)

  for file in self.images:
   self.upload(file)

  self.setClipBoard()

  self.broadcast(self.broadcasts)

 def broadcast(self, l):
  try:
   str = '\n'.join(l)
   n = pynotify.Notification(str)
   n.set_urgency(pynotify.URGENCY_LOW)
   n.show()
  except:
   for line in l:
    print line


 def upload(self, file):
  #Try to login
      cookie_file_name = "/tmp/uploadircookie"

  if ( self.username!="" and self.password!=""):
   print "Uploadir authentication in progress"
   l=pycurl.Curl()
   loginData = [ ("username",self.username),("password", self.password), ("login", "Login") ]
   l.setopt(l.URL, "http://uploadir.com/user/login")
   l.setopt(l.HTTPPOST, loginData)
   l.setopt(l.USERAGENT,"User-Agent: Uploadir (Python Image Uploader)")
   l.setopt(l.FOLLOWLOCATION,1)
   l.setopt(l.COOKIEFILE,cookie_file_name)
   l.setopt(l.COOKIEJAR,cookie_file_name)
   l.setopt(l.HEADER,1)
   loginDataReturnedBuffer = StringIO.StringIO()
   l.setopt( l.WRITEFUNCTION, loginDataReturnedBuffer.write )

   if l.perform():
    self.broadcasts.append("Login failed. Please check connection.")
    l.close()
    return

   loginDataReturned = loginDataReturnedBuffer.getvalue()
   l.close()
   #print loginDataReturned

   if loginDataReturned.find("<li>Your supplied username or password is invalid.</li>")!=-1:
    self.broadcasts.append("Uploadir authentication failed. Username/password invalid.")
    return
   else:
    self.broadcasts.append("Uploadir authentication successful.")

   #cookie = loginDataReturned.split("Set-Cookie: ")[1]
   #cookie = cookie.split(";",0)

   #print cookie



  c = pycurl.Curl()

  values = [
    ("file", (c.FORM_FILE, file))
    ]

  buf = StringIO.StringIO()

  c.setopt(c.URL, "http://uploadir.com/file/upload")
  c.setopt(c.HTTPPOST, values)
  c.setopt(c.COOKIEFILE, cookie_file_name)
  c.setopt(c.COOKIEJAR, cookie_file_name)
  c.setopt(c.WRITEFUNCTION, buf.write)


  if c.perform():
   self.broadcasts.append(uploadfailed+" "+file+".")
   c.close()
   return

  self.result = buf.getvalue()
  #print self.result
  c.close()

  doc = urlparse.urlparse(self.result)

  self.urls.append(doc.getElementsByTagName("download")[0].childNodes[0].nodeValue)

 def setClipBoard(self):
  c = gtk.Clipboard()
  c.set_text('\n'.join(self.urls))
  c.store()
  if len(self.urls) == 1:
   self.broadcasts.append(oneimage)
  elif len(self.urls) != 0:
   self.broadcasts.append(str(len(self.urls))+" "+multimages)

if __name__ == '__main__':
 uploadir = Uploadir(sys.argv)

Any help would be gratefully appreciated.

Warm regards,

© Stack Overflow or respective owner

Related posts about python

Related posts about file-upload