インターネット上で公開されているスクリプトなのですが、実行しようとするとエラーが出てしまいます。どうすれば正しく実行することができるのか、分かる方教えていただけると助かります。よろしくお願いします。
 エラーメッセージはスクリプトの下に記載します。
 ニコニコ動画にログインし、マイページに新規マイリストを作成して、任意の動画をマイリストに登録するスクリプトです。

#!/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, ターミナルを使用

A 回答 (1件)

http://oshiete.goo.ne.jp/qa/7004997.html

対話モードに直接貼り付けないで、スクリプトとして実行してください。

スクリプト全体を通して評価しなければならないものを個別に評価しているので
・スクリプト中、後に定義している変数を、関数内で使っている→関数定義の段階では変数が未定義なため、定義に失敗→定義してない(失敗した)関数を利用しようとしてエラー
となっています。


たしかに、スクリプト自身もあまりよくないですけど。
    • good
    • 0
この回答へのお礼

教えていただいたとおり実行したら、成功しました。
前の質問共々ご親切にお答えいただきありがとうございました!

お礼日時:2011/09/17 02:28

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

今、見られている記事はコレ!

おしトピ編集部からのゆる~い質問を出題中

お題をもっとみる

このQ&Aを見た人が検索しているワード

コンピュータやスピーカーなどのオーディオ、スマートフォンをはじめとした携帯電話とそのサービスに関する質問が充実。急なトラブルの対策案もここで得られるかもしれません。

このカテゴリの人気Q&Aランキング

おすすめ情報

カテゴリ