OSDN Git Service

add otpuploader
[otptools/otptools.git] / otpuploader.py
diff --git a/otpuploader.py b/otpuploader.py
new file mode 100644 (file)
index 0000000..7f2937f
--- /dev/null
@@ -0,0 +1,80 @@
+# otpuploader.py\r
+# -*- coding: utf-8 -*-\r
+"""otpuploader.py - OpenTechPress Attachment Uploader"""\r
+\r
+from poster.encode import multipart_encode\r
+from poster.streaminghttp import register_openers\r
+import urllib\r
+import urllib2\r
+import cookielib\r
+\r
+class OtpUploader(object):\r
+    "OpenTechPress Attachment Uploader"\r
+    def __init__(self):\r
+        self.set_attach_url()\r
+\r
+    def set_attach_url(self, url=""):\r
+        if url == "":\r
+            url = "http://magazine.sourceforge.jp/fileadmin.pl"\r
+        self._attach_url = url\r
+\r
+    def login(self, username, passwd):\r
+        c = cookielib.CookieJar()\r
+        p = urllib2.HTTPCookieProcessor(c)\r
+        opener = urllib2.build_opener(p)\r
+\r
+        login_url = "http://magazine.sourceforge.jp/login.pl"\r
+        params = urllib.urlencode({\r
+            "op": "userlogin",\r
+            "unickname": username,\r
+            "upasswd": passwd,\r
+            "userlogin": u"ログイン".encode("utf-8")\r
+            })\r
+        req = opener.open(login_url, params)\r
+        self._cookie = c\r
+\r
+    def post_attachment(self, sid, filename):\r
+        params = {\r
+            "file_content": open(filename, "rb"),\r
+            "description": "",\r
+            "op": "addFileForStory",\r
+            "sid": sid,\r
+            "Submit": "Submit"\r
+            }\r
+        opener = register_openers()\r
+        opener.add_handler(urllib2.HTTPCookieProcessor(self._cookie))\r
+\r
+        (datagen, headers) = multipart_encode(params)\r
+        request = urllib2.Request(self._attach_url, datagen, headers)\r
+        res = opener.open(request)\r
+        #res = urllib2.urlopen(request)\r
+        #print res.read()\r
+\r
+if __name__ == "__main__":\r
+    import getpass\r
+    import getopt\r
+    import sys\r
+\r
+    (opts, args) = getopt.getopt(sys.argv[1:], "u:")\r
+    opt_dict = dict(opts)\r
+    print opt_dict\r
+    print args\r
+\r
+    if not "-u" in opt_dict:\r
+        uname = raw_input("Username: ")\r
+    else:\r
+        uname = opt_dict["-u"]\r
+\r
+    if len(args) < 2:\r
+        sys.exit("usage: cmd sid <filename>")\r
+    sid = args.pop(0)\r
+\r
+    passwd = getpass.getpass()\r
+    u = OtpUploader()\r
+    u.login(uname, passwd)\r
+    print "cookie: ", u._cookie\r
+\r
+    for f in args:\r
+        print "post %s to sid %s" % (f, sid)\r
+        u.post_attachment(sid, f)\r
+\r