Pythonスクリプトが実行できない
インターネット上で公開されているスクリプトなのですが、実行しようとするとエラーが出てしまいます。どうすれば正しく実行することができるのか、分かる方教えていただけると助かります。よろしくお願いします。
エラーメッセージはスクリプトの下に記載します。
ニコニコ動画にログインし、マイページに新規マイリストを作成して、任意の動画をマイリストに登録するスクリプトです。
#!/usr/bin/env python
#coding: utf8
userid="ここにメールアドレスを入力"
passwd="ここにパスワードを入力"
import sys, re, cgi, urllib, urllib2, cookielib, xml.dom.minidom, time
import simplejson as json
def getToken():
html = urllib2.urlopen("http://www.nicovideo.jp/my/mylist").read()
for line in html.splitlines():
mo = re.match(r'^\s*NicoAPI\.token = "(?P<token>[\d\w-]+)";\s*',line)
if mo:
token = mo.group('token')
break
assert token
return token
def mylist_create(name):
cmdurl = "http://www.nicovideo.jp/api/mylistgroup/add"
q = {}
q['name'] = name.encode("utf8")
q['description'] = ""
q['public'] = 0
q['default_sort'] = 0
q['icon_id'] = 0
q['token'] = token
cmdurl += "?" + urllib.urlencode(q)
j = json.load( urllib2.urlopen(cmdurl), encoding='utf8')
return j['id']
def addvideo_tomylist(mid,smids):
for smid in smids:
cmdurl = "http://www.nicovideo.jp/api/mylist/add"
q = {}
q['group_id'] = mid
q['item_type'] = 0
q['item_id'] = smid
q['description'] = u""
q['token'] = token
cmdurl += "?" + urllib.urlencode(q)
j = json.load( urllib2.urlopen(cmdurl), encoding='utf8')
time.sleep(0.5)
#ログイン
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookielib.CookieJar()))
urllib2.install_opener(opener)
urllib2.urlopen("https://secure.nicovideo.jp/secure/login",
urllib.urlencode( {"mail":userid, "password":passwd}) )
#トークン取得
token = getToken()
#マイリストの作成と動画の登録
mid = mylist_create(u"テストリスト")
addvideo_tomylist(mid, ["sm9","sm1097445", "sm1715919" ] )
<エラーメッセージ>
>>> #?^í?^°?^¤?^ó
... opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookielib.CookieJar()))
>>> urllib2.install_opener(opener)
>>> urllib2.urlopen("https://secure.nicovideo.jp/secure/login",
... urllib.urlencode( {"mail":userid, "password":passwd}) )
<addinfourl at 4311877104 whose fp = <socket._fileobject object at 0x101007758>>
>>> #?^?^??^ü?^¯?^ó?^?^??^?
... token = getToken()
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
File "<stdin>", line 8, in getToken
UnboundLocalError: local variable 'token' referenced before assignment
>>> #?^?^??^¤?^ê?^¹?^?^??^???^??^?^??^???^?^??^Ի?^???^ٻ?^̲
... mid = mylist_create(u"?^?^??^¹?^?^??^ê?^¹?^?^?")
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
File "<stdin>", line 9, in mylist_create
NameError: global name 'token' is not defined
>>> addvideo_tomylist(mid, ["sm9","sm1097445", "sm1715919" ] )
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'mid' is not defined
>>>
<環境>imac, mac os x, ターミナルを使用
お礼
回答有難うございます。すみません、ブラウザのソースには存在すると書きましたが、実際は違いました。ブラウザには表示されていますが、「ソースを表示」で確認すると存在しませんでした。該当箇所をChromeで選択して「要素を検証」すると存在するため、勘違いしていました。正しくはブラウザ上→存在する ブラウザでソースを表示→存在しない Pythonでソースを取得→存在しない です。 その後色々にらめっこして、多分・・ブラウザがJavascriptで表示させているデータかと今は予想しています。なんとかJavascriptの実行結果を得る方法で模索してみたいと思います。 教えていただいたヘッダ情報は設定していなかったので、これからは設定した上で続けていこうと思います。 有難うございました。