- 締切済み
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, ターミナルを使用
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- kmee
- ベストアンサー率55% (1857/3366)
http://okwave.jp/qa/q7004997.html 対話モードに直接貼り付けないで、スクリプトとして実行してください。 スクリプト全体を通して評価しなければならないものを個別に評価しているので ・スクリプト中、後に定義している変数を、関数内で使っている→関数定義の段階では変数が未定義なため、定義に失敗→定義してない(失敗した)関数を利用しようとしてエラー となっています。 たしかに、スクリプト自身もあまりよくないですけど。
お礼
教えていただいたとおり実行したら、成功しました。 前の質問共々ご親切にお答えいただきありがとうございました!