Python URL编码

2024-06-09 18:12:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我是一个新手程序员,但一直在使用python为MusicBrainz Picard应用程序开发插件。外接程序用于从声情并茂的API自动为曲目评分。但是,我遇到了一个错误,如果有人能帮我,我将不胜感激。错误是:

E: 19:37:25 Network request error for https://ws.audioscrobbler.com:443/2.0/?method=artist.getinfo&artist=2%2520Chainz&api_key=0a8b8f968b285654f9b4f16e8e33f2ee&format=json: Error downloading https://ws.audioscrobbler.com:443/2.0/%3Fmethod=artist.getinfo&artist=2%252520Chainz&api_key=0a8b8f968b285654f9b4f16e8e33f2ee&format=json - server replied: Not Found (QT code 203, HTTP code 404) E: 19:37:25 LastFM AutoRate: Track 2 Chainz (Fork) Error parsing response: No JSON object could be decoded

代码如下:

PLUGIN_NAME = 'LastFM AutoRate'
PLUGIN_AUTHOR = 'Zachary Zuno'
PLUGIN_DESCRIPTION = '''Use LastFM to automatically rate your music 
library.'''
PLUGIN_VERSION = "0.1"
PLUGIN_API_VERSIONS = ["0.15"]

from PyQt4 import QtCore
from json import loads
from functools import partial
from picard import log
from picard.metadata import register_track_metadata_processor
from picard.webservice import REQUEST_DELAY
from picard.webservice import XmlWebService

LASTFM_HOST = "ws.audioscrobbler.com"
LASTFM_PORT = 443
LASTFM_KEY = "0a8b8f968b285654f9b4f16e8e33f2ee"
LASTFM_PATH = "/2.0"

REQUEST_DELAY[(LASTFM_HOST, LASTFM_PORT)] = 50

def encode_str(s):
    # Yes, that's right, Last.fm prefers double URL-encoding
    s = QtCore.QUrl.toPercentEncoding(s)
    s = QtCore.QUrl.toPercentEncoding(unicode(s))
    return s

def result(album, metadata, data, reply, error):
    listeners = []
    playcount = []
    try:
        data = loads(data)["artist"]
        for k, v in data.items():
            if k.startswith("stats"):
                listeners.append(v["listeners"])
            if k.startswith("stats"):
                playcount.append(v["playcount"])

        metadata["listeners"] = listeners
        metadata["playcount"] = playcount
        log.debug(u"%s: Track %s (%s) Parsed response (listeners: %s, 
playcount: %s)", PLUGIN_NAME, metadata["artist"], metadata["title"], 
str(listeners), str(playcount))
    except Exception as e:
        log.error(u"%s: Track %s (%s) Error parsing response: %s", 
PLUGIN_NAME, metadata["artist"], metadata["title"], str(e))
        finally:        
        album._requests -= 1
        album._finalize_loading(None)

def process_track(album, metadata, release, track):
    artist = metadata["albumartist"]
    path = u"/2.0/?method=artist.getinfo&artist=%s&api_key=LASTFM_KEY&format=json" % (encode_str(artist))

    album.tagger.xmlws.download(
        LASTFM_HOST,
        LASTFM_PORT,
        path,
        partial(result, album, metadata),
        priority=True
        )
    album._requests += 1

register_track_metadata_processor(process_track)

Tags: fromimportjsondataalbumartisterrortrack