Views
例えばニュースの自動投稿
まとめてユーザ登録した全員に強制的に何か書かせたいとき、ひな形を登録しておいてあげるといいかもしれないとか。
あくまでも例ではあるが、ニュース記事などは、以下のようにして自動投稿できる。
手順としては、
- ログインして Cookie を取得する
- ニュースオブジェクトを作成して id を取得する
- id のオブジェクトの _edit_form へ、form-data で記事を送信する
form-data 作成のところで、別のユーティリティを使ったのが こちらにもある。
# -*- coding: cp932 -*- # login simulator import sys import re import time import urllib import httplib import Cookie import email.Message host = 'hourglass.tkikuchi.net' loginurl = 'http://%s/logged_in' % host user = 'kagome' password = '********' submits = {'came_from': 'http://%s/' % host, '__ac_name': user, '__ac_password': password, 'submit': 'Log in', } # news item の必要データ news_data = {'title': '犬夜叉危うし', 'description': 'またしても、桔梗に目移りした犬夜叉を狙う、怪しい影', 'text_format': 'structured-text', 'form.button.Save': 'Save', 'form.submitted': '1', } text = """\ と、思ったらそれは - 七宝が化けていた とか書いてみたりして。 """ # login して Cookie を貰う data = urllib.urlencode(submits) conn = httplib.HTTPConnection(host) conn.request('POST', loginurl, data) resp = conn.getresponse() cookie = resp.getheader('set-cookie') c = Cookie.Cookie(cookie) if c.has_key('__ac'): ac_cookie = c['__ac'].value else: print "Can't log in!" sys.exit() conn.close() secret = c['__ac'].value # news item を作成し id を取得 createurl = 'http://%s/Members/%s/createObject?type_name=News+Item' \ % (host, user) headers = {'Cookie': '__ac=%s;' % secret} conn = httplib.HTTPConnection(host) conn.request('GET', createurl, headers=headers) resp = conn.getresponse() redir = resp.getheader('location') conn.close() # id を取るところは違うかも知れない id = redir.split('/')[5] # multipart/form-data の作成 def multipart(data, text): m = email.Message.Message() m['Content-Type'] = 'multipart/form-data' for k in data.keys(): v = unicode(data[k], 'cp932').encode('utf-8') p = email.Message.Message() p['Content-Disposition'] = 'form-data; name=%s' % k p.set_payload(v) m.attach(p) text = unicode(text, 'cp932').encode('utf-8') p = email.Message.Message() p['Content-Disposition'] = 'form-data; name=text' p.set_payload(text) m.attach(p) return m # news の送信 m = multipart(news_data, text) body = m.as_string().split('\n\n',1)[1] editurl = 'http://%s/Members/%s/%s/newsitem_edit_form' % (host, user, id) h = httplib.HTTPConnection(host) headers = {'Content-Type': m['content-type'], 'Cookie': '__ac=%s;' % secret, } conn.request('POST', editurl, body, headers) resp = conn.getresponse() print resp.status, resp.reason #for k in resp.msg.keys(): # print k, resp.msg[k]