Я разрабатываю простую программу для очистки страницы общедоступного пользователя и получения всей его ленты. Идея состоит в том, чтобы хранить в файле много строк, каждая из которых содержит объект JSON, такой как возвращаемый при разбиении на страницы (что-то вроде {"data":{"user":{"edge_owner_to_timeline_media":{ ... }}}
).
До сих пор мне удалось успешно запросить страницу пользователя и получить необходимые токены для создания следующего запроса:
GET-запрос на https://instagram.com/username/ для извлечения HTML.
При этом я сохраняю первую строку файла JSON, удаляя все в ответе между <script type=\"text/javascript\">window._sharedData = ";
и ;</script>
, где можно найти объект JS, в котором пользовательская информация вложена в несколько узлов ( ["entry_data"]["ProfilePage"][0]["graphql"]["user"]
). Эта часть входит в строку, например, "{\"data\":"<< Json::writeString(builder, node["user"]) << "}"
и сохраняется в первой строке моего файла JSON.
Из этого же узла я извлекаю идентификатор пользователя, который позже понадобится для нумерации страниц.
Из ответа я также извлекаю URL-адрес сценария /static/bundles/metro/ProfilePageContainer.js/UNIQUE_IDENTIFIER.js
, который затем запрашиваю, чтобы я мог извлечь из него то, что найдено между s.pagination},queryId:"
.
Теперь у меня достаточно данных для создания запроса графика, который должен вернуть следующую страницу, путем построения следующего запроса:
string variables = "{\"id\":\"" + root["entry_data"]["ProfilePage"][0]["graphql"]["user"]["id"].asString() + "\",\"first\":50,\"after\":\"" + root["entry_data"]["ProfilePage"][0]["graphql"]["user"]["edge_owner_to_timeline_media"]["page_info"]["end_cursor"].asString() + "\"}";
string next_page = "https://www.instagram.com/graphql/query/?query_hash=" + queryIdFromScript + "&variables=" + curl_easy_escape(curl, variables.c_str(), variables.length());
Этот запрос возвращает 403.
Мне было интересно, как я могу обойти это.
Я не знаю, есть ли способ сделать этот запрос, как если бы он выполнялся с домашней страницы пользователя, что возможно с помощью dev-tools, или как мне использовать cookie-файлы или что-то для эмуляции что.
Любые советы и рекомендации приветствуются.
Спасибо!