Twitterに画像とテキストをPHPとcronを使用して投稿しようと考えています。
Twitterに画像とテキストをPHPとcronを使用して投稿しようと考えています。 tmhOAuth.phpを利用すればということだったので、同じフォルダ内に入れて実行したところ、 投稿自体はできるのですが、画像が必ず破損してしまう状況で、困っております。 ググってみたものの、投稿が出来ないとお困りの方はいらっしゃるようですが、壊れるという例は内容で、 もし対応方法がお分かりの方がいらっしゃいましたら、アドバイスを頂けれますでしょうか。 tweet.php <?php ini_set( 'display_errors', 1 ); $twConf = array( 'consumer_key' => '********', 'consumer_secret' => '***********', 'user_token' => '**********', 'user_secret' => '*********', 'curl_ssl_verifypeer' => false ); require './library/tmhOAuth.php'; $tmhOAuth = new tmhOAuth($twConf); $image = "/var/www/html/vocaloid/image.jpeg"; $messageEUC = "ロボットからの投稿テスト"; #いまさら文字コードは変えられないので、POSTするテキストのみ文字コードを変換 $message = mb_convert_encoding($messageEUC,'UTF-8','EUC-JP'); $endpoint = $tmhOAuth->url('1.1/statuses/update_with_media'); $imageName = basename($image); $params = array( 'media[]' => "@{$image};type=image/jpeg;filename={$imageName}", 'status' => "{$message}" ); $code = $tmhOAuth->request('POST', $endpoint, $params, true, true); if ($tmhOAuth->response["code"] == 200){ // $codeにもステータスは返ってきます var_dump($tmhOAuth->response["response"]); } else { var_dump($tmhOAuth->response["error"]); } ?>
ベストアンサー
>> #いまさら文字コードは変えられないので、POSTするテキストのみ文字コードを変換 nkfコマンド等で一括変換してみてはいかがでしょうか? find -L ディレクトリ -name '*.php' -print0 | xargs -0n 10 nkf -Lu -w --overwrite さすがにEUC-JPを使うのはレガシーすぎて如何なる状況でもありえないですね…むしろ可能な限り早いうちにUTF-8に移行すべきです.後々保守の苦しみが増えます. >> $tmhOAuth->url('1.1/statuses/update_with_media') このAPIは非推奨です.現在では media/upload のほうが推奨されています. (通信回数が1回で済むメリットはあるので,使ってはいけないわけではないです) >> "@{$image};type=image/jpeg;filename={$imageName}", この@を使った記載方法はPHP5.5で非推奨となり,PHP5.6以降では設定を変えないと使用できません.画像が破損しているのではなく,このテキストをそのまま送っている状況だと思います.PHP5.5以降はCURLFileで代替します. 幾つか解決策はありますが,一番書き換えが少なくて済む方法を選ぶなら $imageName = basename($image); $params = array( 'media[]' => "@{$image};type=image/jpeg;filename={$imageName}", 'status' => "{$message}" ); ↓ $params = [ 'media[]' => new CURLFile($image), 'status' => $message, ]; ぐらいですかね. (ついでにarrayといった書き方も古いのでモダンな表記に変えました
質問者からのお礼コメント
早々のアドバイスありがとうございました。家に戻りましたら早速試してみます。
お礼日時:2016/5/11 9:46