First edit (more details)
:
- Firefox で Modify Headers プラグインを使用してページ ( http://api.wunderlist.com/me/tasks ) にアクセスすると、必要な完全かつ正しい json 文字列が表示されました。失敗することはありません (25 以上のテスト)
- file_get_contents を使用してみましたが、file_get_contents も応答を削減します。さまざまな点で。
- cURL も同じことを行い、さまざまなポイントで応答 json を削減します。「ランダム」に見える
Original post
:
ここで奇妙な問題に頭を悩ませています。ここで見つけることができるWunderlist2 ( http://www.wunderlist.com ) の PHP ラッパーを作成しました: https://github.com/PENDOnl/Wunderlist2-PHP-Wrapper
クラスが突然機能しなくなったというユーザーからの通知を受けるまで、それは完全に機能していました。Wunderlist ユーザーにカレンダー フィードを提供する無料のサービス ( http://wcal.me ) を作成したので、スクリプトをデバッグする最も簡単な方法であるため、そのスクリプトを調べることにしました。
Wunderlist にログインして authtoken を取得すると、クラス内の他のすべての機能も機能するようです) 取得した応答は完全ではなく、json 文字列の途中で停止するだけです。そのため、json_decode
関数は NULL を返すため、カレンダー フィード/メソッドの応答で使用できるタスクはありません。
また、場合によっては(<10%)正常に動作するため、かなりランダムであることにも気付きましたが、もう一度更新すると、出力が再び半分になります。また、「カット」の正確な位置は更新ごとに異なります。
問題が何であるかを特定できる人はいますか?ファイルが完全にダウンロードされるまで待機してから返される方法があるかどうかを確認しようとしましたが、それが cURL のデフォルトの動作でない場合は奇妙です。タイムアウト時間も増やしてみましたが、値を返すので、タイムアウトもしないと思います。
すべてのコードは Github リポジトリにあります。これまでのところ、デバッグのために変更したのは次の部分だけです。
// get / put / delete requests should have HTTP Code 200 OK
// only exception is the login method, which returns HTTP Code 200 OK
if($httpCode == 200 && (strtolower($method) != 'post' || $action == '/login'))
{
$return = json_decode($output, true);
if($_SERVER['REMOTE_ADDR'] == MY_IP) {
if( is_null($return) ) {
echo "<b>Output of json_decode is null:</b><br><br>";
echo $output;
} else {
echo "<b>Output of json_decode os not null:</b><br><br>";
echo $output;
}
}
return $return;
}
完全な応答は次のようになります。
[{"assignee_id":null,"completed_at":null,"completed_by_id":null,"created_at":"2013-11-10T13:16:54Z"},{"assignee_id":null,"completed_at":null,"completed_by_id":null,"created_at":"2013-11-10T13:16:54Z"}]
しかし、ほとんどの場合、次のようになります。
[{"assignee_id":null,"completed_at":null,"completed_by_id":null,"created_at":"2013-11-10T13:16:54Z"},{"assignee
もちろん、これは縮小された応答です。使用可能な応答にはより多くの情報があり、配列にはさらに多くの項目があります。