• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:RSSをMYSQLに入れる最適なコードがわからない)

RSSをMYSQLに入れる最適なコードがわからない

dell_OKの回答

  • dell_OK
  • ベストアンサー率13% (746/5661)
回答No.4

お礼になかなか気づかなくて、 あえなく新たな質問をさせてしまったようで、 すみませんでした。 OKWAVEでは、 質問者の追記投稿はお礼と補足の2回しかないため、 回答者に見てもらうために新たに質問するしかないのが難点ですね。 あちらの質問がもし私宛でしたら、いったん取り消してください。 phpMyAdminは使えるようですので、 SQLタブでこのまま実行していただければよかったです。 CREATE TABLE `rssfeed` ( `title` text NOT NULL, `link` text NOT NULL, `thumb` text NOT NULL, `content` text NOT NULL ) 説明しておくと、 テーブル名は「rssfeed」でテーブルネームも同じ意味です。 カラム名は「title」「link」「thumb」「content」です。 「text」と言うのはデータ型です。 あちらの質問の画像を見ると「int」になっているので、 構造タブから変更してください。 「NOT NULL」は制約と呼ばれるもので、 このカラムには「NULLを許容しない」と言う意味です。 構造タブで見るとNULLが「いいえ」となっているのがそのことです。 phpMyAdminで手動で作成すると既定でこうなります。 あと、あちらの質問の$wpdbがnullになっている件ですが、 WordPress内でやられていないからだと思います。 提示したコードはテーマ内の「index.php」をあれだけにして試してください。 既存の「index.php」があると思いますので、 それはどこかへバックアップをとっておいて試してください。 テーブルもWordPressのデータベースに追加してください。 まずは、それで試してみていただけますか。 WordPressから他のデータベースへアクセスする方法はわからないのでそのことは今は置いておきます。 PHPのソースのことだけで言うと、 $wpdbを使いたいけど、 WordPressではないところでやりたいのでしたら、 こんな感じででもできるかと思います。 WordPressのディレクトリ  C:\xampp\htdocs\wordpress 任意のディレクトリ(私はいつもここで試しています)  C:\xampp\htdocs\test 例えば「rss.php」と言うファイルを任意のディレクトリに作って、 前回提示したコードをまるまる入れます。 で、先頭の<?phpの次の行に以下を追加します。 require_once("../wordpress/wp-load.php"); 「wp-load.php」を参照する必要があることは、 質問者さまも調べられて理解されているとは思います。 "../wordpress/wp-load.php"の最初の「../」は、 自分の場所から見てひとつ上のフォルダと言う意味です。 つまり「C:\xampp\htdocs\」です。 続けて「wordpress/wp-load.php」があることで、 「C:\xampp\htdocs\wordpress/wp-load.php」を参照することになります。 「\」と「/」を混在して記述しましたが、無視してください。

php_learn
質問者

お礼

すみません。RSSのURLが空の状態で実行していました。 改めてファイルの編集を終わらせたところ画面が白紙になっており、データベースへの接続が出来ましたという文言のみ表示されております…

php_learn
質問者

補足

こちらこそ何度も方法を変えてしまい申し訳ないです。 質問は取り消しさせていただきました。 テーブル名、テーブルネーム両方rssfeedで統一したしました。 カラム名は「title」「link」「thumb」「content」で確認いたしました。 データ型を「int」から「text」に変更いたしました。 「NOT NULL」で確認しました。 「index.php」をコピーした後にコードをすべて消し該当のコードのみにいたしました。 Wordpressで今回は作成いたしますので、そちらを優先いたします。 php.iniで確認いたしましたところ、複数のエラーが出ております。 Q1.Warning: simplexml_load_file(): I/O warning : failed to load external entity "" in /home/hlxclitx/public_html/wp-content/themes/sample_theme/index.php on line 29 Q2.Warning: simplexml_load_file(): I/O warning : failed to load external entity "" in /home/hlxclitx/public_html/wp-content/themes/sample_theme/index.php on line 29 Q3.Warning: simplexml_load_file(): I/O warning : failed to load external entity "" in /home/hlxclitx/public_html/wp-content/themes/sample_theme/index.php on line 29 ※該当箇所 $rss = simplexml_load_file($url); Q4.Warning: Invalid argument supplied for foreach() in /home/hlxclitx/public_html/wp-content/themes/sample_theme/index.php on line 30 Q5.Warning: Invalid argument supplied for foreach() in /home/hlxclitx/public_html/wp-content/themes/sample_theme/index.php on line 30 ※該当箇所 foreach ($rss->item as $item) { エラー文の意味を調べております。

関連するQ&A

  • RSSの格納、表示がうまくいかない

    データベースへの接続は完了したんですが、RSSの格納がうまくいきません。 エラー文も表示されず原因がわからないのですが、おかしな文はありますでしょうか? <?php require_once(dirname(dirname(dirname(dirname( __FILE__ )))) . '/wp-load.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
  • データベースからの画像とタイトルにURLがつかない

    RSSを取得して格納までは成功したのですが、画像の取得ができずURL付き画像とタイトルを出力できていません。原因がわからないのですがどのようなことが考えられるでしょうか? <?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; } //RSSをまとめる $url1 = [ 'http://blog.livedoor.jp/dqnplus/index.rdf', 'http://alfalfalfa.com/index.rdf', 'http://himasoku.com/index.rdf',]; // insertの準備 $stmt = $pdo->prepare('insert into teblename (title, link, date) values (?, ?, ?)'); // URLのループ開始 テーブルに格納 foreach ($url1 as $url) { // simplexml_load_file()でRSSをパース解析してオブジェクトを取得します。 if (($rss = @simplexml_load_file($url)) === false) continue; $site_title = $rss->channel->title;// RSSタイトル取得 値の代入 自作関数 // サイトごとに表示するなら、サイトタイトル表示はこの位置 printf('<h2>%s</h2>', $site_title); $count = 0; // 個別記事のループ開始 RSSの取得が始まる 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/');//RSSの情報を取得 $thumb = $item->thumb->url;画像を取得 $thumbnail = '/images/dummy_thumbnail.jpg'; // 画像がない場合の代替画像 if ( $thumb ){ $thumbnail = $thumb; } // 取得した記事データの表示 if ($count === 1) print('<ul>'); $date = date('Y-m-d H:i:s', strtotime($dc->date));//RSS日付け取得 printf('<li>%s:%s:%s</li>', $title, $link, $date,$thumb);// $title, $link, $date,$thumb を表示 } if ($count) print('</ul>'); } ?>

    • ベストアンサー
    • PHP
  • RSSをデータベースに格納できない

    昨日教えていただいたコードで格納して表示するところまで成功しました。 自分の不注意でデータベースネームと違う、新規作成したテーブルに格納していたため起こったエラーでした。申し訳ありません。 再度全体のコードと組み合わせてみたのですがエラーが起こり困っております。 Uncaught Error: Call to a member function insert() on null <?php $url1 = [ 'http://blog.livedoor.jp/dqnplus/index.rdf', 'http://alfalfalfa.com/index.rdf', 'http://himasoku.com/index.rdf', ]; foreach ($url1 as $url) { $count = 0; $rss = simplexml_load_file($url); foreach ($rss->item as $item) { if ($count >= 8) { break; } ++$count; $title = (string) $item->title; //「$item->title」だけではうまくいかないのでstringにキャスト $link = (string) $item->link; //以下同じ $thumb = (string) $item->thumb->url; $content = (string) $item->description; $wpdb->insert('rssfeed', ['title' => $title, 'link' => $link, 'thumb' => $thumb, 'content' => $content], ['%s', '%s', '%s', '%s']); } } $results = $wpdb->get_results('SELECT * FROM rssfeed'); foreach ($results as $item) { echo $item->title.'<br>'; } ?> <?php $wpdb->show_errors(); ?>

    • ベストアンサー
    • PHP
  • RSSのXMLロードで失敗してしまう

    RSSのデータを取得する、という処理を行いたいのですが、 文字コードの件でひっかかってしまっているようで なかなか前に進むことができません。 ************ // RSSの内容を取得する $rss_text = file_get_contents(※RSSのフィードURL); // RSSの文字エンコーディングを変換→再変換 $rss_text = mb_convert_encoding($rss_text, 'SJIS', 'UTF-8'); $rss_text = mb_convert_encoding($rss_text, 'UTF-8', 'SJIS'); $rss_text = preg_replace('/[\x00-\x1f]/', '', $rss_text); // RSSをパースする $rss_xml = new SimpleXMLElement($rss_text); if ($rss_xml) { // XML解析に成功した場合 // SimpleXMLElementオブジェクトからデータを取得 $items = $rss_xml->item; foreach($items as $item) { echo 'ID:'. $item->guid. '<br />'; echo 'リンク:'. $item->link. '<br />'; echo '日付:'. $item->pubDate. '<br />'; echo 'タイトル:'. $item->title. '<br />'; echo '本文:'. $item->description. '<br />'; } } ************ こういったコードを組んでいるのですが、現状では Warning: simplexml_load_string() [function.simplexml-load-string]: Entity: line 1: parser error : attributes construct error in... Warning: simplexml_load_string() [function.simplexml-load-string]: ^ in... Warning: simplexml_load_string() [function.simplexml-load-string]: Entity: line 1: parser error : Couldn't find end of Start Tag rss line 1 in... Warning: simplexml_load_string() [function.simplexml-load-string]: ^ in... Warning: simplexml_load_string() [function.simplexml-load-string]: Entity: line 1: parser error : Extra content at the end of the document in... Warning: simplexml_load_string() [function.simplexml-load-string]: ^ in... このようなエラーが表示されてしまいます。 自分なりに文字コードを処理しているつもりではあるのですが、 他にも何かしなければならないことがあるのでしょうか? どうぞ知恵を貸していただければと思います。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • PHP ブログの交信記録

    PHP初心者です。 下記のソースで一行目の$rss = simplexml_load_file( 以降にアドレスを入れて、ブログの更新情報を表示させたいのですが、うまくいきません。なぜでしょうか? <?php $rss = simplexml_load_file("http://d.hatena.ne.jp/xxxx/rss"); foreach ($rss->item as $item) { $dc = $item->children('http://purl.org/dc/elements/1.1/'); $link = $item->link; $title = $item->title; $date = $dc->date; $date = strtotime($date); $date = date('Y/m/d',$date); echo "<li>$date&nbsp;:&nbsp;<a href=\"$link\">$title</a></li>\n"; } ?>

    • 締切済み
    • PHP
  • タイトルと画像にリンクを付けたい

    クラスを付けることはできたんですが、リンクを付けることができません。 調べてもわからなかったのですが、どのようにコード修正すればよいでしょうか? ※該当コード printf('<li class="sitetitle">%s</li>', $title); printf('<li class="sitelink">%s</li>', $link); printf('<li class="sitedate">%s</li>', $date); printf('<li class="sitethumb">%s</li>', $thumbnail); print '</ul>';// $title, $link, $date,$thumb を表示 <?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; } //RSSをまとめる $url1 = [ 'http://blog.livedoor.jp/dqnplus/index.rdf', 'http://alfalfalfa.com/index.rdf', 'http://himasoku.com/index.rdf',]; // insertの準備 $stmt = $dbh->prepare('insert into teblename (title, link, date) values (?, ?, ?)'); // URLのループ開始 テーブルに格納 foreach ($url1 as $url) { // simplexml_load_file()でRSSをパース解析してオブジェクトを取得します。 if (($rss = @simplexml_load_file($url)) === false) continue; $site_title = $rss->channel->title;// RSSタイトル取得 値の代入 自作関数 // サイトごとに表示するなら、サイトタイトル表示はこの位置 printf('<h2>%s</h2>', $site_title); $count = 0; // 個別記事のループ開始 RSSの取得が始まる 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/');//RSSの情報を取得 $thumb = $item->thumb->url;//画像を取得 // 取得した記事データの表示 if ($count === 1) print('<ul>'); $date = date('Y-m-d H:i:s', strtotime($dc->date));//RSS日付け取得 printf('<li class="sitetitle">%s</li>', $title); printf('<li class="sitelink">%s</li>', $link); printf('<li class="sitedate">%s</li>', $date); printf('<li class="sitethumb">%s</li>', $thumbnail); print '</ul>';// $title, $link, $date,$thumb を表示 } if ($count) print('</ul>'); } ?>

    • ベストアンサー
    • PHP
  • テーブル格納して表示した記事を重複で表示させない

    以下のコードに①select countを用いる方法と②select existsを用いる方法を使いコンテンツの重複を避けるようにしたいと思っています。 調べたところ、以下の場合はselect countを避けるべきだとありました。RSSをテーブルに1ページ36×10ページの360コンテンツ格納するつもりです。この場合かなり重くなることが想定されるのですが、select existsを使いすでに表示された記事を除外することはできるのでしょうか?idなどで除外している例はあるのですが、すでに表示した記事にはないため方法がわかりません。 ・カウント対象件数が多い ・インデックスが効かない ・繰り返し実行することが多い <?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; } //RSSをまとめる $url1 = [ 'http://blog.livedoor.jp/dqnplus/index.rdf', 'http://alfalfalfa.com/index.rdf', 'http://himasoku.com/index.rdf',]; // insertの準備 $stmt = $dbh->prepare('insert into teblename (title, link, date) values (?, ?, ?)'); // URLのループ開始 テーブルに格納 foreach ($url1 as $url) { // simplexml_load_file()でRSSをパース解析してオブジェクトを取得します。 if (($rss = @simplexml_load_file($url)) === false) continue; $site_title = $rss->channel->title;// RSSタイトル取得 値の代入 自作関数 // サイトごとに表示するなら、サイトタイトル表示はこの位置 printf('<h2>%s</h2>', $site_title); $count = 0; // 個別記事のループ開始 RSSの取得が始まる 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/');//RSSの情報を取得 $thumb = $item->thumb->url;//画像を取得 //重複データを避けるため ・カウント対象件数が多い・インデックスが効かない・繰り返し実行することが多い $sql = "select exists ('select * from rss_feed')"; // 取得した記事データの表示 if ($count === 1) print('<ul>'); $date = date('Y-m-d H:i:s', strtotime($dc->date));//RSS日付け取得 printf('<li class="sitelink"><a href="%s">%s</a></li>', $link, $title); printf('<li class="sitelink"><a href="%s">site</a></li>', $link); printf('<li class="sitedate">%s</li>', $date); printf('<li class="sitethumb"><a href="%s"><img src="%s"></a></li>', $link, $thumbnail); print '</ul>';// $title, $link, $date,$thumb を表示 } if ($count) print('</ul>'); } ?>

    • ベストアンサー
    • PHP
  • SimpleXMLでRSSを扱う

    SimpleXMLでRSSを解析したいのですが、SimpleXMLの使い方がイマイチわかりません。 取得したいRSSは以下の東京の天気予報です。 ひとくち予報 in Feed http://www.weathermap.co.jp/hitokuchi_rss/ ウェザーマップ 東京 http://feeds.feedburner.jp/hitokuchi_4410 forecast要素までは取り出せるのですが、そこからtemperatureのmaxやmixを取り出す方法がよく分からないのです。 以下のソースのようにしたとき、$forecastの子要素はまだSimpleXMLElement Objectです。 $atom = simplexml_load_file("http://feeds.feedburner.jp/hitokuchi_4410"); //東京の天気予報 foreach ($atom->channel->item as $item) { $forecast = $item->children("http://www.weathermap.co.jp/rss/ns/forecast.dtd"); } よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHPで以下のサイトのrssの情報を獲得したいのですが、なぜか<ite

    PHPで以下のサイトのrssの情報を獲得したいのですが、なぜか<item>を獲得できません。 rss: http://twib.jp/rss phpコード: $rss =simplexml_load_file('http://twib.jp/rss'); print_r($rss); $title =$rss->channel->title; echo $title; foreach ($rss->channel->item as $item) { echo $item->title; echo $item->description; echo $item->link; echo $item->pubDate; } どなたか、どこを直せばよいか教えていただけないでしょうか。

    • 締切済み
    • PHP
  • simplexml_load_fileを使用してblogのRSSを読み

    simplexml_load_fileを使用してblogのRSSを読み込み、ページ内に表示させたいのですが 下記のスクリプトでは楽天とlivedoorのRSSの読み込みが出来ません。 色々検索してみたのですがこれといった解決法を発見できなかったので質問させていただきます。 どうぞよろしくお願いいたします。 <?php $xml = simplexml_load_file('RSSをここに入力'); $i = 0; foreach($xml->channel->item as $item) { if(++$i>5) break; $title = (string)$item->title ; $link = (string)$item->link ; echo ("<li><a href=".$link.">".$title."</a></li><br />"); } ?>

    • ベストアンサー
    • PHP