如何在PHP中模拟浏览器从Instagram URL获取HTML/JSON数据?
替代Instagram官方API获取页面帖子JSON数据的实现方案
既然Instagram官方API已经暂停服务,要获取Instagram页面的帖子JSON数据,我整理了一套可行的PHP实现代码,亲测能满足需求:
// 开启URL访问权限 ini_set("allow_url_fopen", 1); // 构造请求变量,可调整first的值控制每次获取的帖子数量 $urlvars = urlencode('{"id":"'.$user_id.'","first":12,"after":"'.$end_cursor.'"}'); // 拼接GraphQL请求URL,需替换$__query_hash为有效哈希值 $url = "https://www.instagram.com/graphql/query/?query_hash={$__query_hash}&variables={$urlvars}"; // 构造请求上下文,模拟浏览器User-Agent避免被拦截 $context = stream_context_create( array( "http" => array( "header" => "User-Agent: Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:10.0) Gecko/20100101 Firefox/10.0" ) ) ); // 发起请求并解析JSON数据 $response = file_get_contents($url, false, $context); $json_data = json_decode($response, true);
几个关键注意事项一定要记好:
$__query_hash:这个是Instagram GraphQL接口的专属哈希值,会不定期更新,你需要通过浏览器开发者工具抓取目标帖子列表请求的query_hash来替换$user_id:目标Instagram页面的用户ID,同样可以通过开发者工具查看页面请求或者第三方工具获取$end_cursor:用于分页加载更多内容,第一次请求时可以将这个值设为空字符串,后续每次请求都从返回的$json_data['data']['user']['edge_owner_to_timeline_media']['page_info']['end_cursor']中提取新的游标值- User-Agent必须设置:Instagram会拦截非浏览器标识的请求,所以一定要保留这个请求头设置
内容的提问来源于stack exchange,提问作者saleh mosleh
相关产品推荐
相关产品推荐

