Spotipy не отправляет файл .env с учетными данными | НЕВЕРНЫЙ_КЛИЕНТ? HTTP400?Python

Программы на Python
Ответить
Anonymous
 Spotipy не отправляет файл .env с учетными данными | НЕВЕРНЫЙ_КЛИЕНТ? HTTP400?

Сообщение Anonymous »

В настоящее время начинаю свой первый проект Python по этому руководству:
Учебное пособие по API Spotify — сохранение данных песни
После выполнения всех действий я запускаю проект на терминале и могу выйти и просмотреть сохраненные песни в БД, как и должно быть в проекте. Однако всякий раз, когда я пытаюсь выполнить поиск по исполнителю или по любому слову, которое я ввожу в запрос, я получаю следующее:

Код: Выделить всё

Traceback (most recent call last):
File "/Users/baseplate/Desktop/Apps/spotify_to_yt_to_discord/venv/lib/python3.9/site-packages/spotipy/oauth2.py", line 256, in _request_access_token
response.raise_for_status()
File "/Users/baseplate/Desktop/Apps/spotify_to_yt_to_discord/venv/lib/python3.9/site-packages/requests/models.py", line 1024, in raise_for_status
raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://accounts.spotify.com/api/token

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/Users/baseplate/Desktop/Apps/spotify_to_yt_to_discord/main.py", line 58, in 
songs = search_songs(search_query)
File "/Users/baseplate/Desktop/Apps/spotify_to_yt_to_discord/main.py", line 21, in search_songs
results = sp.search(search_query, limit=10)
File "/Users/baseplate/Desktop/Apps/spotify_to_yt_to_discord/venv/lib/python3.9/site-packages/spotipy/client.py", line 602, in search
return self._get(
File "/Users/baseplate/Desktop/Apps/spotify_to_yt_to_discord/venv/lib/python3.9/site-packages/spotipy/client.py", line 327, in _get
return self._internal_call("GET", url, payload, kwargs)
File "/Users/baseplate/Desktop/Apps/spotify_to_yt_to_discord/venv/lib/python3.9/site-packages/spotipy/client.py", line 251, in _internal_call
headers = self._auth_headers()
File "/Users/baseplate/Desktop/Apps/spotify_to_yt_to_discord/venv/lib/python3.9/site-packages/spotipy/client.py", line 242, in _auth_headers
token = self.auth_manager.get_access_token(as_dict=False)
File "/Users/baseplate/Desktop/Apps/spotify_to_yt_to_discord/venv/lib/python3.9/site-packages/spotipy/oauth2.py", line 229, in get_access_token
token_info = self._request_access_token()
File "/Users/baseplate/Desktop/Apps/spotify_to_yt_to_discord/venv/lib/python3.9/site-packages/spotipy/oauth2.py", line 260, in _request_access_token
self._handle_oauth_error(http_error)
File "/Users/baseplate/Desktop/Apps/spotify_to_yt_to_discord/venv/lib/python3.9/site-packages/spotipy/oauth2.py", line 139, in _handle_oauth_error
raise SpotifyOauthError(
spotipy.oauth2.SpotifyOauthError: error: invalid_client, error_description: Invalid client
Теперь, после нескольких часов просмотра видео на наличие проблем с орфографией или синтаксисом и чтения документации, которую я мог или не мог полностью понять, я попытался разобрать код. Я могу подтвердить, что идентификатор и секретный код верны, поскольку я жестко запрограммировал их в переменных «client_id» и «client_secret», чтобы проверить, будет ли проект работать, и это сработало. Код ниже.

Код: Выделить всё

import os
import spotipy
from spotipy.oauth2 import SpotifyClientCredentials
from song_model import Song
from song_dao import dao_get_all_songs, dao_save_songs
from db import create_tables
from typing import List

client_id = '09090909090909090'
client_secret = '09090909090909090'

client_credentials_manager = SpotifyClientCredentials(
client_id=client_id,
client_secret=client_secret,
)

sp = spotipy.Spotify(client_credentials_manager=client_credentials_manager)

def search_songs(query: str) -> List[Song]:
results = sp.search(search_query, limit=10)

songs = []
for track in results["tracks"]["items"]:
song = Song(
title=track["name"],
artist=track["artists"][0]["name"],
album=track["album"]["name"],
spotify_id=track["id"]
)
songs.append(song)

return songs

if __name__ == '__main__':
create_tables()

while True:
selection = input('''
Enter:
s - to search
g - to print all songs in the db
q - to quit
''')
selection = selection.lower()

if selection == 'q':
break

elif selection == 'g':
print("All songs in the database: ")
all_songs = dao_get_all_songs()
for song in all_songs:
print(f"Title: {song.title} Artist: {song.artist} Album: {song.album}")

elif selection == 's':
search_query = input("Enter your search: ")
songs = search_songs(search_query)

if len(songs) > 0:
print(f"Songs returned: len(songs)")
for i, song in enumerate(songs, start=1):
print(f"{i}: Title: {song.title} Artist: {song.artist}")

save_choice = input("Do you want to save these songs (y/n): ")
if save_choice.lower() == 'y':
dao_save_songs(songs)
else:
print("Songs not saved")
else:
print("No songs were found for your search.")
Это привело меня к мысли, что, возможно, я сделал что-то не так в .env. Тем не менее, я провел тест, чтобы хотя бы распечатать идентификатор и секрет и посмотреть, читается ли он вообще. Поскольку проект работал, когда коды были вставлены непосредственно в переменные, он не должен читаться, что выдавало мне ошибку INVALID_CLIENT. Но это сработало отлично.

Код: Выделить всё

import os

client_id = os.getenv('SPOTIPY_CLIENT_ID')
client_secret = os.getenv('SPOTIPY_CLIENT_SECRET')

print('ID:', client_id)
print('Secret:', client_secret)
Мой файл .env настроен следующим образом:

Код: Выделить всё

SPOTIPY_CLIENT_ID='9090909090909090909090909'
SPOTIPY_CLIENT_SECRET='090909090909099090009'
Я думаю, что на данный момент я уже исчерпал свои знания, поскольку я новичок в этом деле. Как минимум, это дало мне возможность попрактиковаться в диагностике. Заранее спасибо за помощь!

Подробнее здесь: https://stackoverflow.com/questions/791 ... nt-http400
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»