コードの疑問点があるのですが、 //itemを取り出して$rssに渡す $date = $rss->channel->date; // RSSアイテム取得 値の代入 自作関数
コードの疑問点があるのですが、 //itemを取り出して$rssに渡す $date = $rss->channel->date; // RSSアイテム取得 値の代入 自作関数 の部分で、RSSを取得する際のコードが間違っているのではないかと思っております。 channel要素が2つあり上記のコード関数がおかしいのか、役割が被っているのか明確に理解できておりません。 // RSSタイトルがほしいから、もらったrssを渡す $site_title = $rss->channel->title; <?php try { $dsn = 'mysql:dbname=hlxclitx_wp1;host=localhost'; $user = 'hlxclitx_wp1'; $password = 'E.HrypHWxNmltXgC5eS26'; $dbh = new PDO($dsn,$user,$password); $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);//エラーが発生した時に、例外を投げる echo "データベースへの接続が出来ました"; }catch (PDOException $e) { echo $e->getMessage();// err時はメッセージを表示 exit; } $url1 = [ 'http://blog.livedoor.jp/dqnplus/index.rdf', 'http://alfalfalfa.com/index.rdf', 'http://himasoku.com/index.rdf',]; //itemを取り出して$rssに渡す $date = $rss->channel->date; // RSSアイテム取得 値の代入 自作関数 //SQL文を実行、結果を求める $stmt = $dbh->prepare('insert into hlxclitx_feed_rss (data) values (?)'); //$url1配列から先頭のデータをとりだして$urlに渡す なくなるまでループする foreach ($url1 as $url) { //rssがほしいから、もらった$urlを渡す if (($rss = @simplexml_load_file($url)) === false) continue; // RSSタイトルがほしいから、もらったrssを渡す $site_title = $rss->channel->title; //初期のカウント $count = 0; //itemを取り出して$rssに渡す ループ foreach ($rss->item as $item) { //8件を超えたとき取得を終了する if (++$count > 8) break; //タイトル、リンクを取得 $title = $item->title; $link = $item->link; //RSSの情報を取得 $dc = $item->children('http://purl.org/dc/elements/1.1/'); //RSS日付け取得 $date = date('Y-m-d H:i:s', strtotime($dc->date)); // $title, $link, $date を表示 $stmt->execute[json_encode($item)]; } } ?> 補足情報(FW/ツールのバージョンなど) db name hlxclitx_wp1 table name hlxclitx_feed_rss テーブル名 (data) 名前 item
PHP・54閲覧・50
ベストアンサー
>//itemを取り出して$rssに渡す >$date = $rss->channel->date; // RSSアイテム取得 値の代入 自作関数 この時点では、$rss はまだ生成されていないよね(Warning: Undefined variable $rss になると思う) >$stmt->execute[json_encode($item)]; $stmt->execute([json_encode($item)]); だよね? 下記のソースで試したけど問題なく表示される <?php $url1 = [ 'http://blog.livedoor.jp/dqnplus/index.rdf', 'http://alfalfalfa.com/index.rdf', 'http://himasoku.com/index.rdf',]; foreach ($url1 as $url) { if (($rss = @simplexml_load_file($url)) === false) continue; $site_title = $rss->channel->title; printf('<h2>%s</h2>', $site_title); $count = 0; foreach ($rss->item as $item) { if (++$count > 8) break; $title = $item->title; $link = $item->link; $dc = $item->children('http://purl.org/dc/elements/1.1/'); if ($count === 1) print('<ul>'); $date = date('Y-m-d H:i:s', strtotime($dc->date)); printf('<li>%s:%s:%s</li>', $title, $link, $date); } if ($count) print('</ul>'); } というかデバッグするなら適切なタイミングで print や var_dumpなどして値(やオブジェクトのプロパティ)を確認するしかないでしょ?
出力されました。ありがとうございます。 コードはこんなにまとめても表示されるんですね。驚きました。 $stmt->execute([json_encode($item)]); だよね? A.okwabeでも質問をしたのですが、同様の指摘があり。 その部分のみ修正してもエラーが出たので、原因だと考えなかったのですが。 executeはメソッドだから()が必要なんですね。 if (($rss = @simplexml_load_file($url)) === false) continue; ※simplexml_load_fileで$rss を生成してから、$site_title = $rss->channel->title;タイトルを取得するんですね。 勉強になりました。ありがとうございます。
質問者からのお礼コメント
多くのヒントになりました。 ありがとうございます。
お礼日時:1/14 18:12