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

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

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

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

phpMyAdmin

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

PHP

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

受付中

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

homepage-site
homepage-site

総合スコア20

PDO

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

phpMyAdmin

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

PHP

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

0回答

-1評価

0クリップ

225閲覧

投稿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

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

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

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

PDO

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

phpMyAdmin

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

PHP

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