在Python程序中使用Spotify API缓存错误

问题描述 投票:0回答:2

我的 Python 脚本遇到问题。代码执行,但显示缓存错误后:

Couldn't read cache at: .cache
Couldn't write token to cache at: .cache
Couldn't read cache at: .cache
Couldn't write token to cache at: .cache
Couldn't read cache at: .cache
Couldn't write token to cache at: .cache
Couldn't read cache at: .cache
Couldn't write token to cache at: .cache
Couldn't read cache at: .cache
Couldn't write token to cache at: .cache

我正在使用 Spotify 返回播放列表中的歌曲。然后我会检查播放列表中是否有脏词,以过滤掉不能为儿童播放的歌曲。

这是我正在使用的代码:

import spotipy
from spotipy.oauth2 import SpotifyClientCredentials

spotify_id = "ABC123"
spotify_secret = "456789"

oldies = "738hgt"
kids = "201hgj"
country = "099sdt"

spotify_playlist = country

import lyricsgenius

genius_token = "123456789&ABCEFGHIJKLMNOPQRSTUVWXYZ"
genius = lyricsgenius.Genius(genius_token)
genius.verbose = False
genius.timeout = 100

word_listing = ["bad", "words", "go", "here"]

credentials = SpotifyClientCredentials(client_id=spotify_id, client_secret=spotify_secret)
validate = spotipy.Spotify(auth_manager=credentials)

songs = []

limit = 100

offset = 0

playlist = validate.playlist_tracks(spotify_playlist, limit=limit, offset=offset)

while True:
    playlist = validate.playlist_tracks(spotify_playlist, limit=limit, offset=offset)

    if not len(playlist['items']):
        break
    for items in playlist['items']:
        info = {'artist': items['track']['artists'][0]['name'], 'title': items['track']['name']}
        songs.append(info)

    offset += limit

print("Checking playlist...")

for song in songs:
    print(f"    Checking \"{song['title']}\" by: {song['artist']}")
    term = genius.search_song(title=song['title'], artist=song['artist'])

    for words in word_listing:
        try:
            if len(term.lyrics) > 10000:
                break
            if words in term.lyrics.lower():
                print(f"      *Found \"{words}\" in \"{song['title']}\" by: {song['artist']}")
                continue
        except AttributeError:
            print(f"        *Unable to find lyrics for: \"{song['title']}\" by: {song['artist']}")
            break
        except:
            print(f"    *Unable to connect to service, moving on...")

我已经替换了本示例中的所有变量值。我被告知这是 Spotify API 的问题;这只是一个可以忽略的警告。

我还被告知这是一个权限问题,Spotify 想要写入缓存目录,但它没有正确的权限这样做。

我真的不确定是什么导致了这个问题。错误出现在脚本的开头,然后显示之后,脚本的其余部分成功运行。

我的某个论点或陈述中是否有什么东西导致了这种情况?

python
2个回答
0
投票

我认为这是一个权限问题,要解决这个问题,您可以创建一个缓存目录,然后设置适当的权限,以下是如何做到这一点:

import os

cache_dir = '.cache'
if not os.path.exists(cache_dir):
    os.makedirs(cache_dir)

os.chmod(cache_dir, 0o700)

只需在创建

SpotifyClientCredentials
对象之前将此脚本放在代码的开头即可。


0
投票

好的,

所以,我找到了解决方案!

@Saxtheowl 的代码可能可以在 Windows 上运行。

我的错误。我使用的是 Mac,所以它不适合我。我在这里发布我的答案是为了帮助 Mac 上的其他人:-)

在文件的开头我刚刚添加了以下内容:

from pathlib import Path
import os
Path.cwd()
os.chdir('/Users/josh/Desktop/test/temp')
Path.cwd()

所以,我的所有文件都位于“test”目录中,然后它将缓存写入临时文件夹。

我尝试只使用“test”目录,但仍然出现缓存错误...不知何故,将其放入子文件夹中解决了问题:-)

我的命令如下:

sudo python3 /Users/josh/Desktop/test/script.py
(您需要 sudo 以获得权限,否则您也会收到错误)

谢谢,
乔什

© www.soinside.com 2019 - 2024. All rights reserved.