Próbuję umieścić najnowsze media z Instagrama użytkownika na pasku bocznym. Próbuję użyć interfejsu API Instagrama, aby pobrać multimedia.
http://instagram.com/developer/endpoints/users/
Dokumentacja mówi o GET https://api.instagram.com/v1/users/<user-id>/media/recent/
, ale mówi o przekazaniu tokenu dostępu OAuth. Token dostępu reprezentuje upoważnienie do działania w imieniu użytkownika. Nie chcę, aby użytkownicy logowali się na Instagramie, aby zobaczyć to na pasku bocznym. Nie powinni nawet mieć konta na Instagramie.
Na przykład mogę wejść na http://instagram.com/thebrainscoop bez logowania się na Instagramie i oglądać zdjęcia. Chcę to zrobić przez API.
W interfejsie API Instagrama żądania nieuwierzytelnione przez użytkownika przechodzą client_id
zamiast pliku access_token
. Jeśli jednak spróbuję, otrzymam:
{
"meta":{
"error_type":"OAuthParameterException",
"code":400,
"error_message":"\"access_token\" URL parameter missing. This OAuth request requires an \"access_token\" URL parameter."
}
}
Więc czy to niemożliwe? Czy nie ma sposobu, aby pobrać najnowsze (publiczne) media użytkownika bez uprzedniego zalogowania się na konto Instagram za pośrednictwem protokołu OAuth?
źródło
Odpowiedzi:
To już późno, ale warto, jeśli komuś to pomoże, bo nie widziałem tego w dokumentacji Instagrama.
Aby wykonać GET
https://api.instagram.com/v1/users/<user-id>/media/recent/
(w chwili obecnej) nie potrzebujesz tokena dostępu OAuth.Możesz występować
https://api.instagram.com/v1/users/[USER ID]/media/recent/?client_id=[CLIENT ID]
[ID KLIENTA] byłby prawidłowym identyfikatorem klienta zarejestrowanym w aplikacji za pośrednictwem klientów zarządzających (niezwiązanych z żadnym użytkownikiem). Możesz uzyskać [USER ID] od nazwy użytkownika, wykonując żądanie wyszukiwania użytkowników GET:
https://api.instagram.com/v1/users/search?q=[USERNAME]&client_id=[CLIENT ID]
źródło
Możesz pobrać dowolny kanał ze zdjęciami użytkownika Instagram w formacie JSON, używając
?__a=1
obok adresu strony docelowej, takiego jak ten . Nie ma potrzeby uzyskiwania identyfikatora użytkownika ani rejestrowania aplikacji, żadnych tokenów ani protokołu OAuth.min_id
amax_id
zmienne mogą być używane do paginacji, oto przykładYQL
może nie działać w wyciętej ramce iframe, więc zawsze możesz to sprawdzić ręcznie w Konsoli YQLAKTUALIZACJA KWIECIEŃ 2018: Po najnowszych aktualizacjach na Instagramie nie można tego zrobić po stronie klienta (javascript), ponieważ niestandardowych nagłówków dla podpisanego żądania nie można ustawić za pomocą javascript ze względu na
CORS
Access-Control-Allow-Headers
ograniczenia. Jest jeszcze możliwość, aby to zrobić za pośrednictwemphp
lub jakiejkolwiek innej metody po stronie serwera z odpowiednim podpisem na bazierhx_gis
,csrf_token
oraz parametrów żądania. Więcej na ten temat przeczytasz tutaj .AKTUALIZACJA STYCZNIA 2019: YQL przeszedł na emeryturę, więc sprawdź moją najnowszą aktualizację z Google Image Proxy jako
CORS
proxy dla strony Instagram! Wtedy tylko moment negatywny - paginacja nie jest dostępna przy tej metodzie.PHP
rozwiązanie:źródło
11.11.2017
Odkąd Instagram zmienił sposób dostarczania tych danych, żadna z powyższych metod nie działa obecnie. Oto nowy sposób uzyskiwania multimediów użytkownika:
GET
https://instagram.com/graphql/query/?query_id=17888483320059182&variables={"id":"1951415043","first":20,"after":null}
Gdzie:
query_id
- stała wartość: 17888483320059182 (uwaga może ulec zmianie w przyszłości).id
- identyfikator użytkownika. Może zawierać listę użytkowników. Aby uzyskać listę użytkowników, możesz skorzystać z następującego zapytania:GET https://www.instagram.com/web/search/topsearch/?context=blended&query=YOUR_QUERY
first
- ilość przedmiotów do zdobycia.after
- id ostatniej pozycji, jeśli chcesz otrzymać przedmioty z tego id.źródło
query_id
ma stałą wartość. Oznacza to, że zawsze jest to 17888483320059182 (przynajmniej jeśli Instagram tego nie zmieni). id użytkownika - to identyfikator użytkownika (trochę zredagowałem moją odpowiedź)Udało mi się uzyskać najnowsze media użytkownika za pomocą następującego interfejsu API bez uwierzytelniania (w tym opis, polubienia, liczba komentarzy).
https://www.instagram.com/apple/?__a=1
Na przykład
źródło
W zeszłym tygodniu Instagram wyłączył
/media/
adresy URL, zaimplementowałem obejście, które na razie działa całkiem nieźle.Aby rozwiązać problemy wszystkich w tym wątku, napisałem to: https://github.com/whizzzkid/instagram-reverse-proxy
Zapewnia wszystkie publiczne dane Instagrama przy użyciu następujących punktów końcowych:
Pobierz media użytkownika:
Uzyskaj media użytkownika z limitem liczby:
Użyj JSONP:
Interfejs API proxy dołącza również adresy URL następnej strony i poprzedniej strony do odpowiedzi, więc nie musisz tego obliczać na końcu.
Mam nadzieję, że wam się spodoba!
Dzięki @ 350D za dostrzeżenie tego :)
źródło
Interfejs API Instagrama wymaga uwierzytelnienia użytkownika przez OAuth, aby uzyskać dostęp do ostatniego punktu końcowego mediów dla użytkownika. Wydaje się, że obecnie nie ma innego sposobu na pobranie wszystkich multimediów dla użytkownika.
źródło
Jeśli szukasz sposobu na wygenerowanie tokena dostępu do użytku na jednym koncie, możesz spróbować tego -> https://coderwall.com/p/cfgneq .
Potrzebowałem sposobu, aby użyć interfejsu API Instagrama, aby pobrać wszystkie najnowsze multimedia dla określonego konta.
źródło
Oto rozwiązania dla szyn. To coś w rodzaju tylnych drzwi, które w rzeczywistości są drzwiami frontowymi.
Obiekt, który otrzymujesz, różni się w zależności od tego, czy jest to wyszukiwanie użytkownika, czy wyszukiwanie tagów. Otrzymuję takie dane:
Następnie otrzymuję kolejną stronę wyników, konstruując adres URL w następujący sposób:
źródło
Dzięki ciągle zmieniającemu się (i przerażająco zaprojektowanemu) schematowi API Instagrama, większość z powyższych nie będzie działać od kwietnia 2018 roku.
Oto najnowsza ścieżka dostępu do danych poszczególnych postów, jeśli odpytujesz ich API bezpośrednio przy użyciu tej
https://www.instagram.com/username/?__a=1
metody.Zakładając, że zwrócone
JSON
dane$data
możesz przejrzeć każdy wynik, korzystając z następujących przykładów ścieżek:Najważniejsze w tej ostatniej zmianie były
graphql
iedge_owner_to_timeline_media
.Wygląda na to, że w grudniu 2018 r. Zabiją dostęp do interfejsu API dla klientów niebędących klientami biznesowymi więc wykorzystaj go, póki możesz.
Mam nadzieję, że to komuś pomoże;)
źródło
JSFiddle
JavaScript:
HTML:
CSS:
źródło
Chcę tylko dodać do odpowiedzi @ 350D, ponieważ było mi trudno to zrozumieć.
Moja logika w kodzie jest następna:
Podczas pierwszego wywoływania API dzwonię tylko
https://www.instagram.com/_vull_ /media/
. Kiedy otrzymuję odpowiedź, sprawdzam wartość logicznąmore_available
. Jeśli to prawda, pobieram ostatnie zdjęcie z tablicy, pobieram jego id, a następnie ponownie wywołuję API Instagrama, ale tym razemhttps://www.instagram.com/_vull_/media/?max_id=1400286183132701451_1642962433
.Ważna rzecz, o której należy wiedzieć, ten identyfikator jest identyfikatorem ostatniego obrazu w tablicy. Więc pytając o maxId z ostatnim identyfikatorem obrazu w tablicy, otrzymasz następne 20 obrazów i tak dalej.
Mam nadzieję, że to wyjaśnia sprawy.
źródło
Jeśli pominiesz Oauth, prawdopodobnie nie wiesz, który z nich jest użytkownikiem Instagrama. Mając to na uwadze, istnieje kilka sposobów na uzyskanie obrazów z Instagrama bez uwierzytelniania.
Interfejs API Instagrama umożliwia przeglądanie najpopularniejszych obrazów użytkownika bez uwierzytelniania. Korzystanie z następującego punktu końcowego: Oto link
Instagram zapewnia kanały RSS dla tagów w tym miejscu .
Strony użytkowników Instagrama są publiczne, więc możesz użyć PHP z CURL, aby uzyskać ich stronę i parser DOM, aby przeszukać kod HTML pod kątem żądanych tagów graficznych.
źródło
Jeszcze jedna sztuczka, szukaj zdjęć według hashtagów:
Gdzie:
query_hash
- stała wartość (wierzę, że jej hash to 17888483320059182, może zostać zmieniony w przyszłości)tag_name
- tytuł mówi sam za siebiefirst
- ilość przedmiotów do zdobycia (nie wiem dlaczego, ale ta wartość nie działa zgodnie z oczekiwaniami. Rzeczywista liczba zwróconych zdjęć jest nieco większa niż wartość pomnożona przez 4,5 (około 110 dla wartości 25 i około 460 dla wartości wartość 100))after
- id ostatniej pozycji, jeśli chcesz otrzymać przedmioty z tego id. W tym miejscuend_cursor
można użyć wartości z odpowiedzi JSON.źródło
Cóż, ponieważ
/?__a=1
przestałem działać, lepiej jest użyć curl i przeanalizować stronę Instagram, jak napisano w tej odpowiedzi: Wygeneruj token dostępu Instagram API, bez konieczności logowania?źródło
Jeśli chcesz wyszukiwać użytkowników bez identyfikatora klienta i tokena dostępu:
1: Jeśli chcesz wyszukać wszystkich użytkowników, których nazwy są podobne do wyszukiwanego słowa:
zamień SeachName na tekst, który chcesz przeszukać:
https://www.instagram.com/web/search/topsearch/?query=SearchName
2: jeśli chcesz wyszukać dokładnie tę samą nazwę użytkownika:
zamień nazwę użytkownika na żądaną nazwę wyszukiwania:
źródło
Można użyć tego API pobierać publicznej informacji użytkownika Instagram:
https://api.lityapp.com/instagrams/thebrainscoop?limit=2
Jeśli nie ustawić parametr limit, słupki są ograniczone na 12 domyślnie
This api zostało stworzone w SpringBoot z HtmlUnit, jak widać w kodzie:
Oto przykład odpowiedzi:
źródło
Naprawdę potrzebowałem tej funkcji, ale dla Wordpress. Pasowałem i działało idealnie
źródło
Poniższy kod nodejs usuwa popularne obrazy ze strony na Instagramie. Funkcja „ScrapeInstagramPage” dba o efekt post starzenia.
Spróbuj tutaj
Przykład: dla danego adresu URL „ https://www.instagram.com/dress_blouse_designer/ ” można wywołać funkcję
źródło
Działa to przy użyciu prostego wywołania ajax i iteracji ścieżek obrazu.
źródło
Oto skrypt php, który pobiera obrazy i tworzy plik html z linkami do obrazów. Kredyt 350D dla wersji php, to jest właśnie rozwinięte. Sugerowałbym umieszczenie tego zadania w cronie i odpalanie, jak często potrzebujesz. Zweryfikowano działanie na maj 2019 .
źródło