删除Instagram中的实时订阅

时间:2013-12-23 15:52:25

标签: php curl instagram subscription http-delete

删除实时订阅的端点似乎已停止工作。我正在使用'DELETE'自定义请求执行cURL'POST'并从Instagram接收以下JSON响应:

{"meta":{"code":200},"data":null}

但是,订阅不会被删除。我的活动订阅数量永远不会减少,我无法订阅新的对象类型。

还有其他人有这个问题吗?这是我在PHP中的实现(几天前工作正常,直到几天前):

$curl = curl_init();
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_URL, "https://api.instagram.com/v1/subscriptions? client_secret=$client_secret&client_id=$client_id");
curl_setopt($curl, CURLOPT_POST, false);
$resp = curl_exec($curl);

//  Parse JSON                                                                                                                                                                          \

$json = json_decode($resp);

foreach ($json->data as $subscription)
{
echo "DELETING:\r\n";
echo "object:\t$subscription->object\r\n";
echo "object_id:\t$subscription->object_id\r\n";
echo "aspect:\t$subscription->aspect\r\n";
echo "callback URL:\t$subscription->callback_url\r\n";
echo "type:\t$subscription->type\r\n";
echo "id:\t$subscription->id\r\n\r\n";

curl_setopt($curl, CURLOPT_URL, "https://api.instagram.com/v1/subscriptions?client_secret=$client_secret&client_id=$client_id&id=$subscription->object_id");
curl_setopt($curl, CURLOPT_POST, false);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'DELETE');
$resp = curl_exec($curl);

echo $resp."\r\n";
}

1 个答案:

答案 0 :(得分:1)

经过几个小时的试验和错误卷曲,我设法让这个工作,它似乎是一致的,并一直工作。你和我之间的主要区别在于设置这些选项:

curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "DELETE");
curl_setopt($ch, CURLOPT_POST, true);

如您所见,我将CUSTOMREQUEST设置为“DELETE”,但也按顺序将POST设置为true。我猜测,如果不将POST设置为true,它实际上会执行GET(虽然我可能会非常错)。我还读到了关于卷曲选项顺序重要的一些回答,所以也要警惕。下面是我的完整删除功能,如果没有提供$id,它将删除所有订阅,所以请注意。

public function delete($id = "") {
    CakeLog::write('debug', 'Delete subscription called.');

    $clientID = "<<MY clientID>>";
    $clientSecret = "<<MY clientSecret>>";

    $deleteURL = "https://api.instagram.com/v1/subscriptions";
    $deleteParams = "?client_id=".$clientID."&client_secret=".$clientSecret;

    if ($id == "") {
        $deleteParams .= "&object=all";
    }
    else {
        $deleteParams .= "&id=".$id;
    }

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $deleteURL.$deleteParams);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "DELETE");
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // Should cURL return or print out the data? (true = return, false = print)
    $output = curl_exec($ch);
    curl_close($ch);

    CakeLog::write('debug', 'DELETE SUBSCRIPTION RESULT: ' . $output);

    $this->redirect(array('action' => 'index'));

}

请让我知道它是怎么回事,祝你好运