2016-12-16 11 views
0

このコードの問題点Python 2.7.2を使用しています 私が持っているプロジェクトの歌詞を自動的に検索できるPythonスクリプトを作成しようとしていますそれは私にこのエラーエラーいいえJSONオブジェクトをデコードできません

Traceback (most recent call last): 
    File "C:\Users\elaya\Desktop\Song.py", line 26, in <module> 
    data = json.load(response) 
    File "C:\Python27\lib\json\__init__.py", line 291, in load 
    **kw) 
    File "C:\Python27\lib\json\__init__.py", line 339, in loads 
    return _default_decoder.decode(s) 
    File "C:\Python27\lib\json\decoder.py", line 364, in decode 
    obj, end = self.raw_decode(s, idx=_w(s, 0).end()) 
    File "C:\Python27\lib\json\decoder.py", line 382, in raw_decode 
    raise ValueError("No JSON object could be decoded") 
ValueError: No JSON object could be decoded 

を与える

import codecs 
import json 
import sys 
import urllib 
import urllib2 

import bs4 

def extract_lyrics(page): 
    """Extract lyrics text from given lyrics.wikia.com html page.""" 
    soup = bs4.BeautifulSoup(page) 
    result = [] 
    for tag in soup.find('div', 'lyricbox'): 
     if isinstance(tag, bs4.NavigableString): 
      if not isinstance(tag, bs4.element.Comment): 
       result.append(tag) 
     elif tag.name == 'br': 
      result.append('\n') 
    return "".join(result) 

artist = raw_input("Enter artist:") 
song = raw_input("Enter song:") 

query = urllib.urlencode(dict(artist=artist, song=song, fmt="realjson")) 
response = urllib2.urlopen("http://lyrics.wikia.com/api.php?" + query) 
data = json.load(response) 

if data['lyrics'] != 'Not found': 

    print(data['lyrics']) 

    lyrics = extract_lyrics(urllib2.urlopen(data['url'])) 
    filename = "[%s] [%s] lyrics.txt" % (data['artist'], data['song']) 
    with codecs.open(filename, 'w', encoding='utf-8') as output_file: 
     output_file.write(lyrics) 
    print("written '%s'" % filename) 
else: 
    sys.exit('not found') 

に取り組んでくれますが、応答が実際に何であるかを確認する必要があります

+1

は、あなたはそれが実際に私は本当にあなたに感謝する方法がわからないので、多くのあなたは私のプロジェクトを保存したすべての – danidee

答えて

1

を助けてくださいされて。これらのパラメータでそのURLを試してみると、私はmediawikiヘルプページを取得します。値がlyricsactionパラメータを指定する必要があるようです。

query = urllib.urlencode(dict(action='lyrics', artist=artist, song=song, fmt="realjson")) 
+0

おかげでJSONを返すかどうかを確認するために、 'response'変数を視察しまし –

関連する問題