前提・実現したいこと
rssをテーブルに格納して表示したい
発生している問題・エラーメッセージ
なし
該当のソースコード
1,3つのRSSをまとめる <?php $url1 = [ '', '', '',]; 2,まとめたurl1をurlとして扱う ループ処理まとめ foreach ($url1 as $url) { if (($rss = @simplexml_load_file($url)) === false) continue;//$urlを分析してオブジェクトを取得 3,タイトル、サムネイル、リンクを取得=テーブルに格納したい変数 $post_thumbnail= $rss->channel->thumb;//サムネイル $site_title = $rss->channel->title;//タイトル $link = $rss->channel->link; // リンク $description = $rss->channel->description; // サムネイルがない場合のif文を書く 詳細情報 $description = strip_tags($description);//コードが調べてもわからず他サイトのものを引用 タグを取り除く意味 if ( $desW != 0 ){ $description = mb_strimwidth($description, 0, $desW, "…",'utf-8'); } $thumb = '/images/dummy_thumbnail.jpg'; // サムネイルがない場合の代替画像 if ( $thumb ){ $thumbnail = $thumb; } ?> ※if文を閉じたいのだがここで閉じると下の文に影響がありそうな気がする 4,3番のテーブルに格納したい変数をテーブルに入れる <?php $stmt = $dbh->prepare('insert into hlxclitx_feed_rss (post_thumbnail, site_title, link,description) values (?, ?, ?, ?)'); ※if文が前文で終了したため再度php開始タグを使用する<?php 5,いよいよRSSを取得するためにsimplexml_load_file(url)を使う if (($rss = @simplexml_load_file($url)) === false) continue; ※データベースに入れた関数($stmt)を扱わずにurlを使うのはわからない 6,サイトタイトルにclass付与 printf('<h2>%s</h2>', $site_title); (続く) 7,初期のカウント $count = 0 8,最初の階層の要素を $rssという変数で取り出している=表示する foreach ($rss->item as $item) { 9,ループを8件で終了 if (++$count > 8) break; 10,サムネイル、タイトル、リンクを取り出す $post_thumbnail= $item->thumb;//サムネイル $site_title = $item->title;//タイトル $link = $item->link; // リンク $description = $item->description;//詳細 11,RSS1.0を使う $dc = $item->children('http://purl.org/dc/elements/1.1/'); (続く) 12,htmlクラスのオブジェクトを出力 if ($count === 1) print('<ul>'); 13,日時順にソートするため $date = date('Y-m-d H:i:s', strtotime($dc->date)); 14,htmlクラスのオブジェクトを出力 printf('<li>%s:%s:%s</li>', $title, $link, $date); } if ($count) print('</ul>'); } ?>
修正を試みたコード
<?php $url1 = [ '', '', '',]; // insertの準備 $stmt = $dbh->prepare('insert into hlxclitx_feed_rss (post_thumbnail, site_title, link,description) values (?, ?, ?, ?)'); // URLのループ開始 foreach ($url1 as $url) { if (($rss = @simplexml_load_file($url)) === false) continue; // URL固有のデータを取得(これ、全部必要なの?そもそも全部存在するの?) // サイトの内容を個別記事の内容は変数名を変えないとダメ(上書きされてしまう) $site_thumbnail= $rss->channel->thumb; $site_title = $rss->channel->title; $site_link = $rss->channel->link; $site_description = $rss->channel->description; $site_description = strip_tags($site_description); if ($desW != 0) $site_description = mb_strimwidth($site_description, 0, $desW, "…",'utf-8'); $site_thumb = '/images/dummy_thumbnail.jpg'; // サイトごとに表示するなら、サイトタイトル表示はこの位置 printf('<h2>%s</h2>', $site_title); $count = 0 // 個別記事のループ開始 foreach ($rss->item as $item) { if (++$count > 8) break; $thumb = $item->thumb; $title = $item->title; $link = $item->link; $description = $item->description; $dc = $item->children('http://purl.org/dc/elements/1.1/'); $date = date('Y-m-d H:i:s', strtotime($dc->date)); // データを取得し終えたら、その内容を executeメソッドで書き込む $stmt->execute([$site_thumbnail, $site_title, $link, $description]); // 取得した記事データの表示 if ($count === 1) print('<ul>'); printf('<li>%s:%s:%s</li>', $title, $link, $date); } // 個別記事のループ終了 if ($count) print('</ul>'); } // URLのループ終了 ?>
試したこと
$stmt = $pdo->prepare('insert into teblename (data) values (?)'); foreach ($rss->item as $item) $stmt->execute([json_encode($item)]); 各 item を格納して foreach ($pdo->query('select data from tablename order by id desc') as $row) { $item = json_decode($row['data']); // $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>'); }
DB情報
データベース名 hlxclitx_feed_rss
テーブル post_thumbnail, site_title, link,description
あなたの回答
tips
プレビュー