重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

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

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

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

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

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

$url = "http://api.twitter.com/1/statuses/user_timeline. …(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があった場合自動リンクする書き方もお手数でなければ、教えていただけたら幸いに存じ上げます。

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

A 回答 (1件)

>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した日時も取れているとは思いますが・・・

この回答への補足

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
    • good
    • 0
この回答へのお礼

ありがとうございます!

$val->retweeted_status->text

ですね!
自己解決しました!

お礼日時:2012/10/06 08:27

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!