質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PDO

PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

0回答

348閲覧

RSSをデータベースから取得するためにコードを修正し続けているが格納されない

homepage-site

総合スコア28

PDO

PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2022/01/15 09:42

編集2022/01/15 09:57

前提・実現したいこと

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問