我的 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 想要写入缓存目录,但它没有正确的权限这样做。
我真的不确定是什么导致了这个问题。错误出现在脚本的开头,然后显示之后,脚本的其余部分成功运行。
我的某个论点或陈述中是否有什么东西导致了这种情况?
我认为这是一个权限问题,要解决这个问题,您可以创建一个缓存目录,然后设置适当的权限,以下是如何做到这一点:
import os
cache_dir = '.cache'
if not os.path.exists(cache_dir):
os.makedirs(cache_dir)
os.chmod(cache_dir, 0o700)
只需在创建
SpotifyClientCredentials
对象之前将此脚本放在代码的开头即可。
好的,
所以,我找到了解决方案!
@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 以获得权限,否则您也会收到错误)
谢谢,
乔什