0

Twitter アカウントからダイレクト メッセージを取得しました。送信者 ID、送信者のスクリーン名、およびテキストを mysql データベース テーブルに保存して、人工知能マークアップ言語エンジンが読み取って、それに応じて応答できるようにしたいと考えています。プログラムを実行した後、データベースをチェックしましたが、配列から行が入力されておらず、エラーメッセージもありません。

これが私のコードです:

$connection = new TwitterOAuth($consumer_key,$consumer_secret, $oAuthToken, $oAuthSecret);

// Get direct message data 
$content = $connection ->get('https://api.twitter.com/1/direct_messages.json');

echo '<pre>',print_r($content,true),'</pre>';

function write_messages_to_database() {

require_once('connect_to_database');

$conn = mysql_connect("127.0.0.1", "Diego", "frafra") or die(mysql_error());
mysql_select_db('bot', $conn) or die(mysql_error());

foreach ($content as $directmessage) {
   mysql_query("INSERT INTO 'twitter_senders' ('sender_id', 'sender_name'), VALUES ('{$content->id}', '{$content->sender_screen_name}')");
   $directmessage_id = mysql_last_insert_id();
   foreach ($directmessage->text as $text) {
        mysql_query("INSERT INTO 'message_senders' ('message'), VALUES ('{$text->text}')");
   } 

 }
}

id以下は、sender_screen_name との値を抽出したい配列ですtext。また、配列には 3 つのオブジェクトがありますが、例として 1 つだけ貼り付けました。

どう思いますか?

配列
(
    [0] => stdClass オブジェクト
        (
            [送信者 ID] => 374504554
            [recipient_screen_name] => Infobot2012
            [受信者 ID] => 428575951
            [受信者] => stdClass オブジェクト
                (
                    [ID] => 428575951
                    [プロフィール画像のURL] =>
                    [URL] =>
                    [created_at] => Sun Dec 04 22:56:38 +0000 2011
                    [フォロワー数] => 3
                    [デフォルトプロファイル] => 1
                    [プロフィール背景色] => C0DEED
                    [言語] => ja
                    [utc_offset] =>
                    [名前] => ディエゴ・カナーレ
                    [profile_background_image_url] =>
                    [場所] =>
                    [プロフィール リンクの色] => 0084B4
                    [リストされた_カウント] => 0
                    [検証済み] =>
                    [保護] =>
                    [profile_use_background_image] => 1
                    [翻訳者] =>
                    [以下] =>
                    [説明] =>
                    [プロファイル テキストの色] => 333333
                    [statuses_count] => 10
                    [screen_name] => Infobot2012
                    [プロフィール画像のURL_https] =>
                    [タイムゾーン] =>
                    [profile_background_image_url_https] =>
                    [友達の数] => 14
                    [default_profile_image] => 1
                    [contributors_enabled] =>
                    [profile_sidebar_border_color] => C0DEED
                    [id_str] => 428575951
                    [geo_enabled] =>
                    [お気に入り_カウント] => 0
                    [プロフィール背景タイル] =>
                    [お知らせ] =>
                    [show_all_inline_media] =>
                    [profile_sidebar_fill_color] => DDEEF6
                    [follow_request_sent] =>
                )

            [id_str] => 194550124767227905
            [送信者] => stdClass オブジェクト
                (
                    [ID] => 374504554
                    [プロフィール画像のURL] =>
                    [URL] =>
                    [created_at] => 金 9 月 16 日 12:46:20 +0000 2011
                    [フォロワー数] => 19
                    [デフォルトプロファイル] => 1
                    [プロフィール背景色] => C0DEED
                    [言語] => ja
                    [utc_offset] =>
                    [名前] => ディエゴ・カナーレ
                    [profile_background_image_url] =>
                    [場所] => ダブリン
                    [プロフィール リンクの色] => 0084B4
                    [リストされた_カウント] => 0
                    [検証済み] =>
                    [保護] =>
                    [profile_use_background_image] => 1
                    [翻訳者] =>
                    [以下] => 1
                    [説明] =>
                    [プロファイル テキストの色] => 333333
                    [statuses_count] => 92
                    [screen_name] => sdiegolo
                    [プロフィール画像のURL_https] =>
                    [タイムゾーン] =>
                    [profile_background_image_url_https] =>
                    [友達の数] => 79
                    [default_profile_image] =>
                    [contributors_enabled] =>
                    [profile_sidebar_border_color] => C0DEED
                    [id_str] => 374504554
                    [geo_enabled] =>
                    [お気に入りの数] => 1
                    [プロフィール背景タイル] =>
                    [お知らせ] =>
                    [show_all_inline_media] =>
                    [profile_sidebar_fill_color] => DDEEF6
                    [follow_request_sent] =>
                )

            [created_at] => 月 4 月 23 日 22:15:38 +0000 2012
            [ID] => 1.9455012476723E+17
            [sender_screen_name] => sdiegolo
            [テキスト] => こんにちはインフォボット!
        )
4

2 に答える 2

0
  1. 関数を呼び出したことはありますwrite_messages_to_database()か?

  2. いずれにせよ、次の行に沿って再定義することをお勧めします。

    function write_messages_to_database($content) {
        // Use PDO - it'll make your life so much easier
        $dbh = new PDO('mysql:dbname=bot;host=127.0.0.1', "Diego", "frafra");
    
        // use prepared statements to prevent SQL injection
        // see http://bobby-tables.com for more info
        // great thing is, we can prepare once and use many!
        $sender_stmt = $dbh->prepare("
            INSERT INTO twitter_senders (sender_id, sender_name)
            VALUES (:id, :name)
        ");
        $sender_stmt->bindParam(":id"  , $sender_id  );
        $sender_stmt->bindParam(":name", $sender_name);
    
        $message_stmt = $dbh->prepare("
            INSERT INTO message_senders (message) VALUES (:text)
        ");
        $message_stmt->bindParam(":text", $text);
    
        foreach ($content as $directmessage) {
           $sender_id   = $directmessage->sender->id  ;
           $sender_name = $directmessage->sender->name;
           $sender_stmt->execute();
    
           // this is pointless...
           $directmessage_id = $dbh->lastInsertId();
    
           $text = $directmessage->text;
           $message_stmt->execute();
        }
    }
    
于 2012-04-27T00:07:26.913 に答える
0

エラーの内容がわからない限り、あなたを助けることはできません。

これを試してください:

foreach ($directmessage->text as $text) {
        mysql_query("INSERT INTO 'message_senders' ('message'), VALUES ('{$text->text}')") 
        or die(mysql_error());
       } 

さらに、これを行うより良い方法は次のとおりです。

foreach ($directmessage->text as $text) {
    $query = sprintf("INSERT INTO 'message_senders' ('message'), VALUES ('%s')"
                , mysql_real_escape_string($text->text));
    mysql_query($query) or die(mysql_error());
} 
于 2012-04-27T00:14:39.390 に答える