如何避免Instagram应用API调用触达频率上限、降低配额消耗
shadowIGHastag 说明
这是Instagram Graph API后台统计的内部端点别名,无需主动调用,你发起的ig_hashtag_search、标签元数据查询等标签类基础请求,后台会自动归类到该统计项中,属于平台侧正常统计分类,不需要额外处理。
降低API配额消耗方案
- 直接删除冗余调用
你当前代码已经硬编码了固定的hashtag值和对应的ID17843308429009249,不需要再调用ig_hashtag_search查询标签ID,也不需要单独调用接口查询该标签的id、name元数据,删除这两个无效请求后,单次函数执行的请求量从3次降至1次,配额消耗直接减少2/3。 - 新增结果缓存
热门内容top_media更新频率极低,可将接口返回结果缓存到本地文件、Redis等存储中,设置1~2小时的过期时间,仅缓存过期时再发起新的API请求,大部分业务请求直接走缓存返回,可减少90%以上的API调用量。 - 按需调用最新内容接口
你当前已注释recent_media调用逻辑,若无实时获取最新标签内容的强需求,不要开启该接口调用;若确实需要,也可给该接口结果单独设置15~30分钟的缓存,避免频繁请求。
优化后代码示例
function insthashtag() { include "../insta/define.php"; function makeApiCall($endpoint, $type, $params) { $ch = curl_init(); if ('POST' == $type) { curl_setopt($ch, CURLOPT_URL, $endpoint); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params)); curl_setopt($ch, CURLOPT_POST, 1); } elseif ('GET' == $type) { curl_setopt($ch, CURLOPT_URL, $endpoint . '?' . http_build_query($params)); } curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($ch); curl_close($ch); return json_decode($response, true); } $hashtagId = '17843308429009249'; $hashtagTopMediaEndpoint = ENDPOINT_BASE . $hashtagId . '/top_media'; $hashtagTopMediaParams = array( 'user_id' => $instagramAccountId, 'fields' => 'id,caption,children,comments_count,like_count,media_type,media_url,permalink', 'access_token' => $accessToken ); $hashtagTopMedia = makeApiCall($hashtagTopMediaEndpoint, 'GET', $hashtagTopMediaParams); $topPost = $hashtagTopMedia['data'][0]; $topPost1 = $hashtagTopMedia['data'][1]; $topPost2 = $hashtagTopMedia['data'][3]; $return = [$topPost['media_type'], $topPost['media_url'], $topPost1['media_type'], $topPost1['media_url'], $topPost2['media_type'], $topPost2['media_url']]; $jsondata = json_encode($return, JSON_PRETTY_PRINT); return $jsondata; }
调用统计

内容的提问来源于stack exchange,提问作者Ander Canales Medina
相关产品推荐
相关产品推荐

