とりあえず、構想としては、
現在できているシフト表を入力し保存がされたときに、
Google Calendar APIを実行し、内容を保存する
次回、実装したら書く
とりあえず、構想としては、
現在できているシフト表を入力し保存がされたときに、
Google Calendar APIを実行し、内容を保存する
次回、実装したら書く
おひさです。
久しぶりの投稿です。
何気に、電話番号をハイフン無しで登録することが多くなってきている昨今なんですが、
環境によっては市外局番、市内局番、加入者番号の3つに分けて登録しなければいけないことがあるんですよね・・・
そんな時に、便利なAPIを自作してみました。デモで動きは確認できます。
とりあえず、固定電話と携帯電話のみの対応となります。
デモ
現状ではエラーとか何それ?です・・・
おひさしぶりです。
タイトルの通り、チェック対象のファイルがアニメーションgifかそうじゃないかのチェックプログラムを・・・
で、とほほさんのGIFフォーマットの詳細を参考にしてみました。
/** * アニメーションGIFかチェック * * @params string $img_file 画像ファイル(画像ファイルまでのPATH付き) * @return bool true:アニメーションGIF false:それ以外 */ function checkAnimationGif($img_file) { if (!file_exists($img_file)) { // ファイルが無い return false; } if (!($fp = fopen($img_file, "rb"))) return false; $head = fread($fp, 6); if (!preg_match("/^GIF89a/", $head)) { // GIF89a 以外 return false; } // カウント初期化 $gce_cnt = 0; while (!feof($fp)) { if (bin2hex(fread($fp, 1)) != "21") continue; switch (bin2hex(fread($fp, 2))) { /* // 2014-11-06 削除 case "ff0b": // Application Extension fclose($fp); return true; break; */ case "f904": // Graphic Control Extension $gce_cnt++; if ($gce_cnt > 1) { fclose($fp); unset($gce_cnt); return true; } break; } } fclose($fp); unset($gce_cnt); return false; }
多分これで、チェックできるはず・・・
追記:2014-11-06
adobeのフォトショップで作成されたgifでApplication Extensionが含まれる通常のgifが作成されていることがわかりましたので
上記のソースを修正しました。
連投・・・
土日のREST APIがハングしなかった・・・
今しがた、コンソール叩いてレスポンスヘッダー見てみたら
chunkの文字が見当たらない・・・
ちょっと前までchunkがあったと思っていたんだけど・・・
?もしかして、twitter側でchunkやめたのか??
かなり安定しているんだけど、、chunkのせいだったのか・・・
もう少し様子を見よう・・・
追記(2014-05-20 20:45):そんなことはなかったorz
ご無沙汰しております。
表題の件について、ひとつ愚痴を・・・
自分自身のtwitterアカウントのusertimlineを、「REST API」を使用しcronで定期的に取得していたところ・・・
取得が終わらず取得プログラムのプロセスが、ずっと残っているではありませんかorz
この原因を色々調べてみたけど良く分からないo…rz
プログラムにどこまで実行できたのかをlogに出力したところ、「REST API」にリクエストを投げ(file_get_contentsを使用)て返ってこないことがわかりました。
本当に返ってきていないか調べるためにfile_get_contentsではなく、fopenで接続をしてからfreadで1バイトずつ、ファイルに出力したところ・・・jsonデータがファイルに出力されていました。
と言うことは?どういうこと??
feof関数のマニュアル以下抜粋
返り値
ファイルポインタが EOF に達しているかまたはエラー (ソケットタイムアウトを含みます) の場合に TRUE 、 その他の場合に FALSE を返します。注意
警告
fsockopen() でオープンした接続がサーバーによって閉じられていない場合、feof() はハングします。回避策は以下の例を参照ください。
“オープンした接続がサーバーによって閉じられていない場合、feof() はハングします。”
プロセスが終わらず残っていたのは、ハングしてたからか?というメボシをつけてみた・・・
で、twitterなので、freadで固定バイト数ずつ読み込んで結合し、その文字列がjson_decodeでfalseを返さない場合、while文を抜けるようにしてみたところ上手くこの処理で抜ける場合の「REST API」のリクエストがあった、これで十中八九『EOF』がtwitterのサーバーから送られていないと思われ・・
※上記のwhile文を抜けるもう少し詳しい条件としは、!feof($fp)の場合で、json_decode($str)がfalseではない場合にbreakです。
結局、REST APIのリクエストが届くサーバーが、EOFを返すサーバーと返さないサーバーがあるということで、どうもこの返さないサーバーにあたることが多いのが問題・・・
ていうか、twitterさんeof返しておくれ・・・