Open RLaszczak opened 5 months ago
Dokładnie, jak @MarekBartczak wspomniał - dostęp do zasobu /offers/listing jest limitowany, więc bez weryfikacji nie pobierzesz z niego danych. Co do samej autoryzacji - adres przekierowania, który podajesz powinien być 1:1 zgodny z tym, który zapisałeś podczas rejestracji aplikacji. Jak widzę w logach, dokonałeś wielu zmian i często adresy te były niezgodne. Struktura adresu powinna być zgodna z opisanymi w tym artykule.
Czyli w pierwszej kolejności muszę mieć zarejestrowaną aplikację przez Allegro i dopiero potem mogę uzyskać dostęp do danych, czy źle to rozumiem i Allegro nie udostępnia już danych ofert w ramach Allegro API? Co do przekierowania - zmieniłem w Allegro API oraz w kodzie, bo zmianie kod pomijał logowanie i przekierowywał na stronę przekierowania.
Tak, musisz posiadać zarejestrowaną aplikację, a następnie skontaktować się z obsługą serwisu, aby aplikacja ta przeszła proces weryfikacji (to proces całkowicie poza nami). Dopiero po pozytywnym rozpatrzeniu wniosku uzyskujesz dostęp do /offers/listing.
W tym wątku nie pojawiła się żadna nowa odpowiedź w ciągu 7 dni, dlatego automatycznie oznaczamy go jako przeterminowany. Jeśli w ciągu kolejnych 7 dni nie pojawi się żadna odpowiedź, wątek zostanie zamknięty. Dziękujemy za zaangażowanie w dyskusję i zachęcamy Cię do wypełnienia ankiety dotyczącej naszego wsparcia na forum.
There was no new reply in this thread within 7 days, therefore, we automatically marked it as expired. If no response is received within the next 7 days, this thread will be closed. Thank you for engaging in the discussion. We encourage you to complete our forum support survey.
Dzień dobry,
Potrzebuję pobrać z Allegro dane dotyczące ofert z kategorii modelarstwa do swojej aplikacji do porównywania cen. Od tygodnia próbuję zrozumieć temat, ale nie jestem w stanie znaleźć co robię źle. Zarejestrowałem swoją aplikację, dodałem adres przekierowania (tutaj nie jestem pewny czy go dobrze dodałem). Porównywarkę cen tworzę w ASP.NET MVC, więc nie wiem na co mam ustawić adres przekierowania. Na początku próbowałem pobrać dane wykorzystując access_token, ale potem wyczytałem że potrzebuję to zrobić inaczej. Pierwotnie ustawiłem w poniższym kodzie REDIRECT_URI na https://allegro.pl/auth/oauth/token, dostałem w odpowiedzi w linku zapytanie czy chcę powiązać swoje konto ze swoją aplikacją. Po ponownym uruchomieniu dostałem błąd 4d322281ea5e6106 lub 36b9dc0357e406f2. Potem próbowałem jeszcze zmienić adres przekierowania, ale program się wykonywał i uruchamiał stronę przekierowania a nie dostałem strony z kodem... Tak obecnie wygląda mój kod w Pythonie:
import requests import base64 from pymongo import MongoClient
mongo_client = MongoClient('localhost', 27017)
db = mongo_client['NAZWABAZY']
collection = db['NAZWAKOLEKCJI']
category_id = "1061" # modelarstwo
CLIENT_ID = "klient_ID" # w kodzie mam podane własne dane CLIENT_SECRET = "klient_secret" REDIRECT_URI = "https://SaleCheckApp.com/allegro/oauth/callback" AUTH_URL = "https://allegro.pl/auth/oauth/authorize?response_type=code&client_id=" + CLIENT_ID + "&redirect_uri=" + REDIRECT_URI
print("Proszę zalogować się na Allegro i zezwolić na dostęp do danych:") print(AUTH_URL)
auth_code = input("Po autoryzacji proszę podać kod autoryzacyjny: ")
TOKEN_URL = "https://allegro.pl/auth/oauth/token" token_data = { "grant_type": "authorization_code", "code": auth_code, "redirect_uri": REDIRECT_URI } client_credentials = f"{CLIENT_ID}:{CLIENT_SECRET}" encoded_credentials = base64.b64encode(client_credentials.encode()).decode() token_headers = { "Authorization": "Basic " + encoded_credentials } token_response = requests.post(TOKEN_URL, data=token_data, headers=token_headers)
if token_response.status_code == 200: access_token = token_response.json()['access_token']
Próbowałem też pobierać dane w ten sposób:
import requests from pymongo import MongoClient
mongo_client = MongoClient('localhost', 27017)
db = mongo_client['BAZA']
collection = db['KOLEKCJA']
ACCESS_TOKEN = "ey..."
category_id = "1061"
url = "https://api.allegro.pl/offers/listing" headers = { "Authorization": f"Bearer {ACCESS_TOKEN}", "Accept": "application/vnd.allegro.public.v1+json" } params = { "category.id": category_id, "limit": 100
}
response = requests.get(url, headers=headers, params=params)
if response.status_code == 200: data = response.json() collection.insert_many(data['offers']) print("Dane zapisane w bazie MongoDB.") else: print("Wystąpił problem z żądaniem API. Status:", response.status_code)
Czy istnieje inny sposób, by pobrać dane o produktach z danej kategorii do bazy lub pliku csv? Byłbym wdzięczny za poradę co poprawić oraz co robię źle. Dziękuję i pozdrawiam