Skocz do zawartości
  • Cześć!

    Witaj na forum RootNode - aby pisać u nas musisz się zarejestrować, a następnie zalogować. Posty pisane z kont niezarejestrowanych nie są widoczne publicznie.

file_get_contents zablokowane przez allegro, co teraz?


zlotowinfo

Rekomendowane odpowiedzi

kupuję na allegro i moja strona wyszukiwała co kilka minut interesujące mnie aukcje

niestety dwa dni temu allegro zablokowało możliwość pobierania file_get_contents,

dodałem kod który miał pomóc $context, ale tak samo

"...failed to open stream: HTTP request failed! HTTP/1.0 403 Forbidden in..."

 

próbowałem tego, niestety też nie działa

<?php
$context = stream_context_create(
  array(
    'http' => array(
      'user_agent' => 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36',
    ),
));

$content = file_get_contents('https://allegro.pl/listing?string=wiertark*%20sto%C5%82ow*&price_to=250&price_from=100', false, $context);

echo $content;
?>

 

Odnośnik do komentarza
Udostępnij na innych stronach

Jak można zauważyć w outputcie, zaczęli używać JS Challenge. Proponuje do takiego scrapowania emulator np. phantom

[mateusz@pc ~]$ curl 'https://allegro.pl/listing?string=wiertark*%20sto%C5%82ow*&price_to=250&price_from=100'
<html><head><title>allegro.pl</title><style>#cmsg{animation: A 1.5s;}@keyframes A{0%{opacity:0;}99%{opacity:0;}100%{opacity:1;}}</style></head><body style="margin:0"><p id="cmsg">Please enable JS and disable any ad blocker</p><script>var dd={'cid':'AHrlqAAAAAMAt8R4oLfSw80AwG3xrQ==','hsh':'77DC0FFBAA0B77570F6B414F8E5BDB','t':'fe','s':29963,'host':'geo.captcha-delivery.com'}</script><script src="https://ct.captcha-delivery.com/c.js"></script></body></html>
[mateusz@pc ~]$

 

Odnośnik do komentarza
Udostępnij na innych stronach

1 godzinę temu, zlotowinfo napisał:

dodałem kod który miał pomóc $context, ale tak samo

Jeśli już Dodałeś to co dodałeś to dodaj też pozostałem parametry żądanie HTTP jakie wysyła przeglądarka.
Ale najlepszym podejściem będzie wykorzystanie API.

Odnośnik do komentarza
Udostępnij na innych stronach

@Matix8981 też to testowałem z podobnymi wnioskami

@mrViperoo czy możesz rozwinąć? nie wiem co tam podać, nie musiałem nigdy aż tak kombinować

@nnd.newbie jestem na bakier z dokumentacjami
po za tym nie skopiuję url z przeglądarki do skryptu, tylko trzeba wszystko przerabiać

wpisałem w przeglądarkę: https://api.allegro.pl/offers/listing?phrase=laptop&category.id=77917

{"errors":[{"code":"NotAcceptableException","message":"Not acceptable representation requested. Please check 'Accept' request header","details":null,"path":null,"userMessage":"Żądanie zawiera błędne dane. Skontaktuj się z autorem aplikacji."}]}

 

Odnośnik do komentarza
Udostępnij na innych stronach

No nie, nie wystarczy skopiować URL do api do skryptu który jest scraperem html. Ale jeśli chcesz mieć to zrobione dobrze to powinieneś użyć API. Ściąganie danych ze strony wymaga wprowadzania poprawek w skrypcie jeśli ulegnie zmianie struktura strony HTML, a ta może ulegać zmianom bez żadnych powiadomień ze strony Allegro .  Poza tym roboty biegające po stronie WWW są niemile widziane przez twórców stron. Więc nie tylko musisz reagować na przebudowę stron, ale także ciągle kombinować jak obejść zabezpieczenia i upierdliwości stosowane przez twórcę strony, którzy będą próbować Cię blokować. Czego przykład masz teraz.

Edytowane przez nnd.newbie
Odnośnik do komentarza
Udostępnij na innych stronach

53 minuty temu, zlotowinfo napisał:

po za tym nie skopiuję url z przeglądarki do skryptu, tylko trzeba wszystko przerabiać

By skorzystać z API z pewnością musisz uzyskać TOKEN autoryzacji, który musisz przekazać w stosownym nagłówku autoryzacji

https://developer.allegro.pl/getting_started/#jak-uzyskać-token-dostępowy-do-api
Musisz  wywołać odpowiednia końcówkę "end point"  URL  i przesłać parametry żądania

 

Nie tak jak ty robisz na żywca jakieś zlepki !

 

Wszystko masz w dokumentacji

Odnośnik do komentarza
Udostępnij na innych stronach

W dokumentacji są wymienione wszystkie nagłówki, które są potrzebne, żeby uzyskać dane z API: https://developer.allegro.pl/getting_started/

 

~ ❯❯❯ curl -H 'Accept: application/vnd.allegro.public.v1+json' 'https://api.allegro.pl/offers/listing?phrase=laptop&category.id=77917'
{"error":"unauthorized","error_description":"Full authentication is required to access this resource"}%                               
~ ❯❯❯ 

 

Odnośnik do komentarza
Udostępnij na innych stronach

Ty masz w o ogolę jakieś pojęcie o programowaniu ?

https://lornajane.net/posts/2011/posting-json-data-with-php-curl
https://tecadmin.net/post-json-data-php-curl/
https://www.codegrepper.com/code-examples/php/curl+request+php+send+json

ITD..

 

Odnośnik do komentarza
Udostępnij na innych stronach

Będziesz musiał odpuścić sobie dużo innych rzeczy, jeśli nie masz zamiaru nauczyć się programować albo nie zaczniesz komuś płacić za to że coś ci zaprogramuje. Poza tym przydałoby się doszkolić, żeby przynajmniej mieć pojęcie jak zlecić taką pracę , bo to co napisałeś na repozytorium Allegro Api delikatnie mówiąc świadczy o dogłębnym braku znajomości tematu. Zaczynając od tytułu: "przetłumaczyć wyszukiwanie na język api" które nie ma sensu, nie jest ani pytaniem ani opisem błędu, za to zawiera stwierdzenie "język api" który jest jakimś  oksymoronem (api to nie język, a nawet gdyby był to "przetłumaczenie wyszukiwania" na jakiś język też ma sens chyba tylko dla ciebie).

  • Lubię 1
Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Korzystając z forum, wyrażasz zgodę na: Warunki użytkowania, Regulamin, Polityka prywatności.