• ベストアンサー
  • すぐに回答を!

最後1行だけ…どのように書き直せばいいのでしょうか

  • 質問No.7731123
  • 閲覧数196
  • ありがとう数2
  • 気になる数0
  • 回答数1
  • コメント数0

お礼率 89% (224/250)

唐突に質問失礼致します。PHPの初心者です。
1ヶ月ほど試行錯誤した結果、暗礁に乗り上げてしまって困っているので教えて頂きたいです。

下記を参考にPHPでFC2ブログに投稿するスクリプトを書いているのですが、
FC2ブログに記事を投稿するスクリプト
http://blog.ishitoya.info/entry/20080330/1206907632

投稿文を自分のTwitterのタイムラインにしたいと思っています。

そこで上のスクリプトの上方の一部に少しだけ下記のように書き加えました。

/////////////////////////

$url = "http://api.twitter.com/1/statuses/user_timeline.json?&include_rts=true&screen_name=(Twitterユーザー名)&page=".$_POST['page'];
$tweets = json_decode(file_get_contents($url));
foreach ($tweets as $tweet) {
echo "<li>".$tweet->text."</li>";
}

try{
$bm = new FC2BlogManager($fc2_host, $fc2_xmlrpc_path);
$bm->setUser($fc2_user);
$bm->setPassword($fc2_passwd);
$bm->postEntry("PHPから投稿テスト4-Title",
"テスト4-Dsescription [".$tweet->text."]<br/>改行コード埋め込み \n なんかいけてそう");
var_dump($bm->getBlogs());
}catch(Exception $e){
echo $e->getMessage();
}

/////////////////////////////////////

↓のようにすることでブラウザ上のphp実行画面では、Twitterのタイムラインがテキスト化されて表示されるのですが、

$bm->postEntry(" [".$tweet->text."]");

実際に投稿されるのはTwitterをテキスト化した時の一番下のツイート(一番古くしたツイート)のみなのです。

[ ]内をどのように書き直せば、タイムライン(.jsonのテキスト化内)がすべて拾えるでしょうか?


また、記事タイトルをその日のものに自動指定したり、時間を指定して(例えば24時間など)その時間内にしたツイートを限定して拾える方法、ツイート内にURLがあった場合自動リンクする書き方もお手数でなければ、教えていただけたら幸いに存じ上げます。

誠に勝手で稚拙な質問で恐縮ですが、教えていただけたら幸いに存じ上げます。

質問者が選んだベストアンサー

  • 回答No.1
  • ベストアンサー

ベストアンサー率 54% (865/1590)

>foreach ($tweets as $tweet) {
>echo "<li>".$tweet->text."</li>";
>}

この記述で全部拾えているのですよね?であれば

$str = '';
foreach ($tweets as $val) { $str .= $val->text . "\n"; }
$bm->postEntry(" [". $str ."]");

などとすればいいのでは?

>記事タイトルをその日のものに自動指定したり、時間を
>指定して(例えば24時間など)その時間内にしたツイートを
>限定して拾える方法、ツイート内にURLがあった場合自動
>リンクする書き方

とりあえず

var_dump($tweets);

として、どういうデータが拾えるのかを確認してみては如何ですか?多分、tweetした日時も取れているとは思いますが・・・
補足コメント
walsch

お礼率 89% (224/250)

shimix様。本当にありがとうございます!
ご教授の通り行ない、調べたり試行錯誤して、見事にテキストから、時間日時、自動リンクまで作成することができました。この1ヶ月でのどに詰まっていたことがスッと解決しました!
とても簡潔にわかりやすく回答を下さったshimix様に心から御礼申し上げます。

そしてvar_dump($tweets);でオブジェクトを引き出して入力できるようになりました!

ただ、そこで少し疑問が生じまして、補足という名目で再度聞いて恐縮なのですが、

foreach ($tweets as $val) { $str .= $val->text .'<br />' .$val->created_at .'<br /><br />'."\n";

現在は、このような形で、ツイートと時間を引き出していますが、リツイートのみテキストが途中で「 ...」と切られてしまって困っています。

例えば、var_dump($tweets);でオブジェクトを見てみるとこのような感じに、途中で途切れてに表示されているテキストと、
そのすぐ次の次のオブジェクトに、全部フルで表示されているオブジェクトがあります。

12 =>
object(stdClass)[25]
   public 'text' => string 'RT @xxxxxxxx: 吾輩は猫である。名前はまだ無い。どこで生れたか頓(とん)と見當がつかぬ。何でも薄暗いじめじめした所でニヤーニヤー泣いて居た事丈は記憶して居る。吾輩はこゝで始めて人間といふものを見た。然(しか)もあとで聞くとそれは書生といふ人間中で一番獰悪(だうあく)な種族であつたさうだ。此書生といふのは時々我々を捕 ...' (length=344)

※(同じ12 =>内で、[26]、[27]と下位オブジェクトに並んでいます)↓

   object(stdClass)[27]
public 'text' => string ' 吾輩は猫である。名前はまだ無い。どこで生れたか頓(とん)と見當がつかぬ。何でも薄暗いじめじめした所でニヤーニヤー泣いて居た事丈は記憶して居る。吾輩はこゝで始めて人間といふものを見た。然(しか)もあとで聞くとそれは書生といふ人間中で一番獰悪(だうあく)な種族であつたさうだ。此書生といふのは時々我々を捕(つかま)へて煮て食ふといふ話である。' (length=388)

13 =>
object(stdClass)[29]
    :
    :

自分自身のツイートは文字数フルでツイートされていても、全テキスト表示されるのですが、リツイートの長いテキストのみ文末が「...」にされてしまいます。

おそらく「RT @xxxxxxxx:(これだと14文字)」分の文字数が多いので、押し出された文末が「...」に省略されてしまうのだと思います。(入力された文字の短いリツイートは全部表示されます)

この場合、リツイートのツイートのみを、上のように「...」で省略せずに、
下の全部フルテキストのオブジェクトの方を指定して引き出したいのですが、この場合はどう指定して書けばいいでしょうか?

誠に勝手にも続けて質問して恐縮ですが、教えていただけたら幸いに存じ上げます。
投稿日時:2012/10/04 18:07
お礼コメント
walsch

お礼率 89% (224/250)

ありがとうございます!

$val->retweeted_status->text

ですね!
自己解決しました!
投稿日時:2012/10/06 08:27
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,600万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A

その他の関連するQ&Aをキーワードで探す

ピックアップ

ページ先頭へ