flickrでの画像を取得について

このQ&Aのポイント
  • flickrの関数flickr.interesting.getListを使用して人気の高い画像を取得する方法について説明します。
  • 指定したdateパラメータにより画像が表示されない場合の解決方法について説明します。
  • 特定のプロキシを使用して画像を取得するためのコードの例を提供します。
回答を見る
  • ベストアンサー

flickrでの画像を取得について

次の関数はflickr.interesting.getListでflickrから人気の高い画像を取得する関数ですが、パラメータのdateを指定すると Warning: Invalid argument supplied for foreach() in C:\xampp\htdocs\flickr-interesting.php on line 34 と表示されます。 date => 2013-07-24,の行を消すと画像が正常に表示されます。 dateを指定するにはどうすればいいでしょうか? function search_photos($per_page, $page) { $proxy = array( "http" => array( "proxy" => "tcp://大学のIPアドレス", 'request_fulluri' => true, ), ); $proxy_context = stream_context_create($proxy); $params = array( 'method' => 'flickr.interestingness.getList', 'api_key' => API_KEY, 'date' => 2013-07-24, 'per_page' => $per_page, 'page' => $page ); $pictureSize = "b"; $query = http_build_query($params, '', '&'); $url = 'http://www.flickr.com/services/rest/?' . $query; //$data = @simplexml_load_string(@file_get_contents($url)); $data = @simplexml_load_string(@file_get_contents($url, false, $proxy_context)); if ($data === false) { return 'エラー' . PHP_EOL; } $ret = ''; $format = '<a href="http://www.flickr.com/photos/%s/%s/"><img src="http://farm%s.static.flickr.com/%s/%s_%s_m.jpg" alt="%s"></a>' . PHP_EOL; foreach ($data->photos->photo as $p) { $ret .= sprintf($format, $p['owner'], $p['id'], $p['farm'], $p['server'], $p['id'], $p['secret'], $p['title'], $pictureSize); } return $ret; }

  • PHP
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

dateは普通にFlicker APIでYYYY-MM-DD形式で使えるようなので、 'date' => '2013-07-24', のように囲んでもダメでしょうか?

toyama-ooo
質問者

お礼

回答ありがとうございました。 シングルクォーテーションで囲んだら直りました。

関連するQ&A

  • flickrから画像を取得するプログラムが動かない。

    こんばんわ。 flickrという画像サイトから画像を取得するという方法を試して見たのですが、うまく動きませんでした。何も表示されませんでした。 flickrのキーは取得してあり、キーも、入力した状態です。 レンタルサーバーにて実行しています。 <?php define (APIKEY , "[取得したキー]"); $searchWord = "猫"; //検索したい画像のキーワード $pictureSize = "t"; //画像サイズ $url = "http://www.flickr.com/services/rest/?" . "method=flickr.photos.search" . "&format=rest" . "&api_key=".APIKEY . "&per_page=20" . "&license=1,2,3,4,5,6" . "&extras=owner_name" . "&text=".urlencode($searchWord); $xml = simplexml_load_file($url); //print_r($xml); $iLoop = 0; echo "<table>"; foreach($xml->photos->photo as $photoValue){ if( $iLoop == 0){ echo "<tr><td>"; } else { echo "<td>"; } $farmId = $photoValue['farm']; $serverId = $photoValue['server']; $photoId = $photoValue['id']; $secret = $photoValue['secret']; $owner = $photoValue['owner']; $ownername = $photoValue['ownername']; //改行はレイアウトのため echo "<a href=\"http://www.flickr.com/photos/{$owner}/{$photoId}/\"> <img src=\"http://farm{$farmId}.static.flickr.com/{$serverId}/ {$photoId}_{$secret}_{$pictureSize}.jpg\" /></a><br>"; echo "author by <a href=\"http://www.flickr.com/photos/{$owner}/\"> {$ownername}</a>"; $iLoop++; if( $iLoop == 4){ echo "</td></tr>"; $iLoop = 0; } else { echo "</td>"; } } if( $iLoop != 0 ){ echo "</tr>"; } echo "</table>"; ?> 掲載していたHPはこちら http://webservice.kabufuru.net/flickr/photosPhp.php

    • 締切済み
    • PHP
  • flickrAPIでの画像取得について

    下のphpスクリプトでflickrAPIを用いて画像を取得しようとしたらエラーが起こって取得できません。 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>flickr API サンプル</title> </head> <body> <h1>flickr API サンプル</h1> <?php set_time_limit(60); //flickrから写真を検索してimgタグを返す関数 function search_flickr($keyword,$limit){ //取得したAPIキーを設定 $api_key = '(僕のAPIキー)'; //メソッドに写真検索を設定 $method = 'flickr.photos.search'; //検索キーワードをURLエンコードして設定 $text = urlencode($keyword); //人気の高い順に検索 $sort = "interestingness-desc"; //取得件数を設定 $per_page = $limit; //URLを生成 $url = 'http://www.flickr.com/services/rest/?'. 'method='.$method. '&api_key='.$api_key. '&text='.$text. '&sort='.$sort. '&per_page='.$per_page; //取得したXMLファイルをパースし、オブジェクトに代入 $data = simplexml_load_file($url) or die("XMLパースエラー"); //表示写真サイズをmサイズに設定 $size = "_m"; //変数初期化 $ret = ""; //取得できた写真の数だけループ処理 foreach($data->photos as $photos){ foreach($photos->photo as $photo){ $ret .= '<a href="http://www.flickr.com/photos/'.$photo['owner'].'/'.$photo['id'].'/">'; $ret .= '<img src="http://farm'.$photo['farm'].'.static.flickr.com/'.$photo['server'].'/'.$photo['id'].'_'.$photo['secret'].$size.'.jpg" alt="'.$photo['title'].'">'."\n"; $ret .= '</a>'; } } return $ret; } //検索ワード $keyword = "sea"; //取得数 $limit = 10; //写真を検索して表示 echo search_flickr($keyword,$limit); ?> <p>powerd by <a href="http://www.flickr.com/services/api/">Flickr Services</a></p> </body> </html> 表示されたページはこうなりました。 flickr API サンプル Warning: simplexml_load_file(http://www.flickr.com/services/rest/?method=flickr.photos.search&api_key=(僕のAPIキー)&text=sea&sort=interestingness-desc&per_page=10): in C:\xampp\htdocs\flickrAPI.php on line 38 Warning: simplexml_load_file(): I/O warning : failed to load external entity "http://www.flickr.com/services/rest/?method=flickr.photos.search&api_key=(僕のAPIキー)&text=sea&sort=interestingness-desc&per_page=10" in C:\xampp\htdocs\flickrAPI.php on line 38 XMLパースエラー そこでhttp://www.flickr.com/services/rest/?method=flickr.photos.search&api_key=(僕のAPIキー)&text=sea&sort=interestingness-desc&per_page=10にアクセスすると次のようなXMLが表示されました。 <?xml version="1.0" encoding="UTF-8"?> -<rsp stat="ok">-<photos total="9663727" perpage="10" pages="966373" page="1"><photo title="row" isfamily="0" isfriend="0" ispublic="1" farm="1" server="55" secret="86cffac801" owner="89972557@N00" id="148800272"/><photo title="Live" isfamily="0" isfriend="0" ispublic="1" farm="8" server="7381" secret="d5af918c8c" owner="36621592@N06" id="9017742627"/><photo title="In search of the pot of gold at the end of the Rainbow..." isfamily="0" isfriend="0" ispublic="1" farm="4" server="3717" secret="bf47d94889" owner="56936646@N07" id="8851282635"/><photo title="Melting ice 130424 F368" isfamily="0" isfriend="0" ispublic="1" farm="8" server="7404" secret="907a7c260e" owner="44855005@N04" id="8771141696"/><photo title="Coachella Valley" isfamily="0" isfriend="0" ispublic="1" farm="8" server="7310" secret="5d47f6cb45" owner="53760536@N07" id="8729902328"/><photo title="End of a summer day" isfamily="0" isfriend="0" ispublic="1" farm="8" server="7434" secret="46a80bb865" owner="72179079@N00" id="8722395239"/><photo title="angles of sea" isfamily="0" isfriend="0" ispublic="1" farm="9" server="8253" secret="32fc571841" owner="39638504@N07" id="8696358702"/><photo title="Summer sunset ( view larger size: please press "L")" isfamily="0" isfriend="0" ispublic="1" farm="9" server="8261" secret="21c4642b39" owner="72179079@N00" id="8688567245"/><photo title="Smoo Cave II" isfamily="0" isfriend="0" ispublic="1" farm="9" server="8403" secret="b6d637d603" owner="8407953@N03" id="8672345286"/><photo title="In The Middle of Nowhere" isfamily="0" isfriend="0" ispublic="1" farm="9" server="8533" secret="1ba0e8574c" owner="8407953@N03" id="8666924709"/></photos></rsp> どうすればエラーが直るでしょうか?

    • ベストアンサー
    • PHP
  • phpを2つ書くと表示されない

    こちらのサイトを見てflickrの写真を取得することができました。 divタグで区切って2段にして上は猫の写真、下は犬の写真を表示させたいのですが犬の写真用のphpのコードを書くと1段目の猫の画像すら表示されなくなります。 一体なぜでしょうか。 <div id="cats"> <?php //flickrから写真を検索してimgタグを返す関数 function search_flickr($keyword,$limit){ //取得したAPIキーを設定 $api_key = '86f08c1dec4643d02154d65ed******'; //メソッドに写真検索を設定 $method = 'flickr.photos.search'; //検索キーワードをURLエンコードして設定 $text = urlencode($keyword); //人気の高い順に検索 $sort = "interestingness-desc"; //取得件数を設定 $per_page = $limit; //URLを生成 $url = 'https://api.flickr.com/services/rest/?'. 'method='.$method. '&api_key='.$api_key. '&text='.$text. '&sort='.$sort. '&per_page='.$per_page; //取得したXMLファイルをパースし、オブジェクトに代入 $data = simplexml_load_file($url) or die("XMLパースエラー"); //表示写真サイズをmサイズに設定 $size = "_m"; //変数初期化 $ret = ""; //取得できた写真の数だけループ処理 foreach($data->photos as $photos){ foreach($photos->photo as $photo){ $ret .= '<a href="http://www.flickr.com/photos/'.$photo['owner'].'/'.$photo['id'].'/">'; $ret .= '<img src="http://farm'.$photo['farm'].'.static.flickr.com/'.$photo['server'].'/'.$photo['id'].'_'.$photo['secret'].$size.'.jpg" alt="'.$photo['title'].'">'."\n"; $ret .= '</a>'; } } return $ret; } //検索ワード $keyword = "Britishmuseum"; //取得数 $limit = 10; //写真を検索して表示 echo search_flickr($keyword,$limit); ?> </div> <div id="dogs"> <?php //flickrから写真を検索してimgタグを返す関数 function search_flickr($keyword,$limit){ //取得したAPIキーを設定 $api_key = '86f08c1dec4643d02154d65ed59915c0'; //メソッドに写真検索を設定 $method = 'flickr.photos.search'; //検索キーワードをURLエンコードして設定 $text = urlencode($keyword); //人気の高い順に検索 $sort = "interestingness-desc"; //取得件数を設定 $per_page = $limit; //URLを生成 $url = 'https://api.flickr.com/services/rest/?'. 'method='.$method. '&api_key='.$api_key. '&text='.$text. '&sort='.$sort. '&per_page='.$per_page; //取得したXMLファイルをパースし、オブジェクトに代入 $data = simplexml_load_file($url) or die("XMLパースエラー"); //表示写真サイズをmサイズに設定 $size = "_m"; //変数初期化 $ret = ""; //取得できた写真の数だけループ処理 foreach($data->photos as $photos){ foreach($photos->photo as $photo){ $ret .= '<a href="http://www.flickr.com/photos/'.$photo['owner'].'/'.$photo['id'].'/">'; $ret .= '<img src="http://farm'.$photo['farm'].'.static.flickr.com/'.$photo['server'].'/'.$photo['id'].'_'.$photo['secret'].$size.'.jpg" alt="'.$photo['title'].'">'."\n"; $ret .= '</a>'; } } return $ret; } //検索ワード $keyword = "Britishmuseum"; //取得数 $limit = 10; //写真を検索して表示 echo search_flickr($keyword,$limit); ?> </div>

    • ベストアンサー
    • PHP
  • Flickrの写真に対するコメント取得

    Flickrに投稿された写真のコメントをAPIを使って取得しようと考えています。 写真の取得はこのサイトを参考にしてできましたが、コメントの取得がうまくいきません。 コードはこのサイトに書いてある通りで変えていませんが、どの部分を変更すればうまくコメント取得はできるのでしょうか。 検索結果をJSONに変換することはできましたが、コメントを画面に出力することができません。 わかるかたお願いします。 コードはここに載せておきます。 <?php //ライブラリを読み込む require_once 'phpflickr-master/phpFlickr.php' ; // Consumer Key $app_key = '' ; // Consumer Secret $app_secret = '' ; // インスタンスを作成する $flickr = new phpFlickr( $app_key , $app_secret ) ; //オプションの設定 $option = array( 'tags' => 'Tokyo, Japan', 'per_page' => 50 , // 取得件数 'extras' => 'description' , // 画像サイズ 'safe_search' => 3 , // セーフサーチ 'sort' => 'interestingness-desc', ) ; // GETメソッドで指定がある場合 foreach( array( 'tag' , 'per_page' , 'woe_id' , 'license' , 'sort' , 'bbox' ) as $val ) { if( isset( $_GET[ $val ] ) && $_GET[ $val ] != '' ) { $option[ $val ] = $_GET[ $val ] ; } } // 検索を実行し、取得したデータを[$result]に代入する $result = $flickr->photos_search( $option ) ; // [$result]をJSONに変換する $json = json_encode( $result ); // JSONをオブジェクト型に変換する $obj = json_decode( $json ) ; // HTML用 $html = '' ; // 写真検索を実行する $html .= '<h2>条件を指定する</h2>' ; $html .= '<p>条件を指定して、写真を検索してみて下さい。</p>' ; $html .= '<form>' ; $html .= '<p style="font-size:.9em; font-weight:700;"><label for="text">検索キーワード (text)</label></p>' ; $html .= '<p style="margin:0 0 1em;"><input id="text" name="text" value="寺" placeholder="寺"></p>' ; $html .= '<p style="font-size:.9em; font-weight:700;"><label for="bbox">位置範囲 (bbox)</label></p>' ; $html .= '<p style="margin:0 0 1em;"><input id="bbox" name="bbox" list="bbox-data" placeholder=""></p>' ; $html .= '<datalist id="bbox-data">' ; $html .= '<option value="139.74136476171873,35.67800739824976,139.78565339697263,35.71146639304908">' ; $html .= '</datalist>' ; $html .= '<p><button>検索する</button></p>' ; $html .= '</form>' ; // 実行結果の表示 $html .= '<h2>実行結果</h2>' ; $html .= '<p>リクエストの実行結果です。</p>' ; // リスト形式で表示する $html .= '<ul style="margin:2em 0 0; padding:0; overflow:hidden; list-style-type:none; text-align:center;">' ; // ループ処理 foreach( $obj->photo as $photo ) { // データが揃っていない場合はスキップ if( !isset($photo->url_q) || !isset($photo->width_q) || !isset($photo->height_q) ) { continue ; } // データの整理 $t_src = $photo->url_q ; // サムネイルの画像ファイルのURL $t_width = $photo->width_q ; // サムネイルの横幅 $t_height = $photo->height_q ; // サムネイルの縦幅 $o_src = ( isset($photo->url_c) ) ? $photo->url_c : $photo->url_q ; // 画像ファイルのURL // 出力する $html .= '<li style="float:left; margin:1px; padding:0; overflow:hidden; height:112.5px">' ; $html .= '<a href="' . $o_src . '" target="_blank">' ; $html .= '<img src="' . $t_src . '" width="' . $t_width . '" height="' . $t_height . '" style="max-width:100%; height:auto">' ; $html .= '</a>' ; $html .= '</li>' ; } $html .= '</ul>' ; // 取得したデータ $html .= '<h2>取得したデータ</h2>' ; $html .= '<p>下記のデータを取得できました。</p>' ; $html .= '<h3>JSONに変換後</h3>' ; $html .= '<p><textarea rows="8">' . $json . '</textarea></p>' ; ?><!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name="robots" content="noindex,nofollow"> <link rel="stylesheet" type="text/css" href="style.css"> <!-- ビューポートの設定 --> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Flickr APIで写真を検索するサンプルデモ</title> </head> <body> <div id="main"> <p>aaa</p> </div> <div id="main2"> <?php echo $html ?> <p style="text-align:center"><a href="https://syncer.jp/flickr-api-matome">配布元: Syncer</a></p> </div> </body> </html>

    • 締切済み
    • PHP
  • flickrのAPIを用い、任意の写真を表示する方法

    flickrのAPIを用いて、個人のページに、指定した写真を表示させたいと思っています。 こちらのページを、参考にして(そのままのソースで)、flickrにアップロードされた最新の写真の中から、「HDR」というタグが付いた写真は表示させられるようになりました。 http://itpro.nikkeibp.co.jp/article/COLUMN/20061101/252356/?ST=swd-tech これを、写真を“撮影した時の時間”で表示させたいと思っています。 たとえば、2004年1月16日に撮った写真を表示、といった具合です。 flickrは、HPを見ると、taken on~ と写真を撮った時のデータも表示されており、撮影した時間もAPIから取ってこれると思うのですが、以下のソースをどのように変えたらよいでしょうか。 よろしくお願いいたします。 flickr-search.js -------------------------- // 画像検索を行う関数 function photo_search ( param ) { // APIリクエストパラメタの設定 param.api_key = 'APIキー'; param.method = 'flickr.photos.search'; param.per_page = 9; param.sort = 'date-posted-desc'; param.format = 'json'; param.jsoncallback = 'jsonFlickrApi'; // APIリクエストURLの生成(GETメソッド) var url = 'http://www.flickr.com/services/rest/?'+ obj2query( param ); // script 要素の発行 var script = document.createElement( 'script' ); script.type = 'text/javascript'; script.src = url; document.body.appendChild( script ); }; // 現在の表示内容をクリアする function remove_children ( id ) { var div = document.getElementById( id ); while ( div.firstChild ) { div.removeChild( div.lastChild ); } }; // オブジェクトからクエリー文字列を生成する関数 function obj2query ( obj ) { var list = []; for( var key in obj ) { var k = encodeURIComponent(key); var v = encodeURIComponent(obj[key]); list[list.length] = k+'='+v; } var query = list.join( '&' ); return query; } // オブジェクトからクエリー文字列を生成する関数 function obj2query ( obj ) { var list2 = []; for( var key in obj ) { var k = encodeURIComponent(key); var v = encodeURIComponent(obj[key]); list2[list2.length] = k+'='+v; } var query = list2.join( '&' ); return query; } // Flickr検索終了後のコールバック関数 function jsonFlickrApi ( data ) { // データが取得できているかチェック if ( ! data ) return; if ( ! data.photos ) return; var list = data.photos.photo; if ( ! list ) return; if ( ! list.length ) return; // 現在の表示内容(Loading...)をクリアする remove_children( 'photos_here' ); // 各画像を表示する var div = document.getElementById( 'photos_here' ); for( var i=0; i<list.length; i++ ) { var photo = list[i]; // a 要素の生成 var atag = document.createElement( 'a' ); atag.href = 'http://www.flickr.com/photos/'+ photo.owner+'/'+photo.id+'/'; // img 要素の生成 var img = document.createElement( 'img' ); img.src = 'http://static.flickr.com/'+photo.server+ '/'+photo.id+'_'+photo.secret+'_s.jpg'; img.style.border = '0'; atag.appendChild( img ); div.appendChild( atag ); } } search-hdr.html ------------------------------ <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Flickr APIによる画像検索 (text)</title> <script type="text/javascript" src="flickr-search.js"></script> <script type="text/javascript"><!-- window.onload = function () { photo_search({ text: 'HDR' }); } --></script> </head> <body> <hr> <div id="photos_here">Loading...</div> <hr> </body> </html>

  • $queryや$argsの意味

    お世話になります。 wordpressの勉強に色々なサイトを見てサンプルコードを試したりしてますが その中に$queryや$argsといった文字列があったります。 条件にしたがって表示件数を変更のサンプルソースに function set_post_per_page( $query ) { if ( is_admin() || ! $query->is_main_query() ) return; if ( $query->is_home() ) { $query->set( 'posts_per_page', 1 ); return; } if ( $query->is_post_type_archive( 'movie' ) ) { $query->set( 'posts_per_page', 50 ); return; } } add_action( 'pre_get_posts', 'set_post_per_page'); というソースがありました。 これはホームの場合は全件表示し、movieのアーカイブページは50件表示にするソースだと思いますが $queryや$query->の意味が分かりません。 他にも global $post; $args = array( 'posts_per_page' => 5, 'cat' => 1 ); $myposts = get_posts( $args ); foreach( $myposts as $post ) { setup_postdata($post); ?> <h1><?php the_title(); ?></h1> <?php } wp_reset_postdata(); というソースがありましたがこちらにも$args等入っており理解ができません。 これはどういう意味なのでしょうか。 よろしくお願いします。

    • ベストアンサー
    • CSS
  • RSSと投稿記事を交互に表示させたい

    内容の修正が必要ですが原因がわかりません 1.投稿に画像やカテゴリーなどが表示されず、タイトルと日付けのみ表示されている 2.RSS画像にURLがついておらず画像のみ表示されている 3.RSSの画像がない場合ダミー画像を表示させたいが書き方が調べてもわからない <?php $dbh = connect_db(); $categories = []; foreach (get_categories() as $category) { $categories[$category->cat_ID] = $category; } function set_other_data($post) { // アイキャッチIDを取得 $post_thumbnail_id = get_post_thumbnail_id($post); // アイキャッチ画像の確認 if ($post_thumbnail_id) { // 存在する $image_src = wp_get_attachment_image_src($post_thumbnail_id); // サムネイルの画像URLを設定 $post->thumbnail = $image_src[0]; } else { // 存在しない $post->thumbnail = 'noimage.jpg'; } // カテゴリーIDを取得 $post->categories = wp_get_post_categories($post->ID); // コメントテキスト if (0 == $post->comment_count) { // コメントなし $post->comments = __('No Comments'); } else { // コメントあり $post->comments = $post->comment_count.'件のコメント'; } // コメントリンク $post->comments_link = get_comments_link($post->ID); } delete_old_rss($dbh);//接続オブジェクトを渡す //RSS保存 $dbh = connect_db();//① $stmt = $dbh->prepare('insert into rss_feed (title, link, date, img) values (?, ?, ?, ?) on duplicate key update title=?, link=?, date=?, img=?');//② $url1 = get_rss_site_url(); foreach ($url1 as $url) { if (($rss = @simplexml_load_file($url)) === false) { continue; } foreach ($rss->item as $item) { $dc = $item->children('dc', true); $date = date('Y-m-d H:i:s', strtotime($dc->date)); if ($date < $delete_date) { continue; } $title = $item->title; $link = $item->link; $content = $item->children('content', true); $result = preg_match('/<img[^>]*src=\"([^"]+)\"[^>]*>/i', $content->encoded, $matches); if (1 == $result) { $img = $matches[1]; } else { $img = ''; } $stmt->execute([$title, $link, $date, $img, $title, $link, $date, $img]); } } if (ctype_digit($_REQUEST['page'])) { $current_page = (int) $_REQUEST['page']; } else { $current_page = 1; } if ($current_page > $wp_query->max_num_pages) { $current_page = $wp_query->max_num_pages; } $block_per_page = 2; $rss_per_block = 18; $posts_per_block = $wp_query->post_count / $block_per_page; //RSS読み込み $rss_per_page = $block_per_page * $rss_per_block; $rss_offset = ($current_page - 1) * $rss_per_page; $sql = 'SELECT * FROM rss_feed ORDER BY date DESC LIMIT ?,?'; $stmt = $dbh->prepare($sql); $stmt->bindParam(1, $rss_offset, PDO::PARAM_INT); $stmt->bindParam(2, $rss_per_page, PDO::PARAM_INT); $stmt->execute(); $rss_items = $stmt->fetchAll(PDO::FETCH_OBJ); $posts_per_page = $block_per_page * $posts_per_block; $posts_offset = ($current_page - 1) * $posts_per_page; $args = [ 'posts_per_page' => $posts_per_page, 'offset' => $posts_offset, ]; $post_items = get_posts($args); //表示 for ($i = 0; $i < $block_per_page; ++$i) { echo '<h2>ブロック</h2>'; echo '<h3>RSS</h3>'; for ($j = 0; $j < $rss_per_block; ++$j) { $item_index = $i * $rss_per_block + $j; if ($item_index >= count($rss_items)) { break; } $item = $rss_items[$item_index]; echo '<ul>'; echo "<li class=\"sitelink\"><a href=\"{$item->link}\">{$item->title}</a></li>"; echo "<li class=\"sitelink\"><a href=\"{$item->link}\">site</a></li>"; echo "<li class=\"sitedate\">{$item->date}</li>"; if (!empty($item->img)) { echo "<li><img src=\"{$item->img}\" width=\"100\"></li>"; } echo '</ul>'; } echo '<h3>投稿</h3>'; for ($j = 0; $j < $posts_per_block; ++$j) { $item_index = $i * $posts_per_block + $j; if ($item_index >= count($post_items)) { break; } $item = $post_items[$item_index]; echo '<ul>';   echo "<li><a href=\"{$item->guid}\">{$item->post_title}</a></li>"; echo "<li>{$item->post_date}</li>"; echo '</ul>'; } }

    • ベストアンサー
    • PHP
  • PHPでのページング処理についての質問です。

    ドットインストールにてページングの勉強をしています。 http://dotinstall.com/lessons/paging_php_v2/8510 件数が多いと、 この場合ですと10ページ以上まで表示されてしまうかと思うのですが、 よくあるWEBサービスのように10ページまでで区切り、 10ページ目をクリックすると、 5ページから15ページまでを表示させたいのですが、 どのように書いていくものでしょうか? <?php define('DB_HOST', 'localhost'); define('DB_USER', 'dbuser'); define('DB_PASSWORD', '********'); define('DB_NAME', 'dotinstall_paging_php'); define('COMMENTS_PER_PAGE', 5); if (preg_match('/^[1-9][0-9]*$/', $_GET['page'])) { $page = (int)$_GET['page']; } else { $page = 1; } error_reporting(E_ALL & ~E_NOTICE); try { $dbh = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME,DB_USER,DB_PASSWORD); } catch (PDOException $e) { echo $e->getMessage(); exit; } // select * from comments limit OFFSET, COUNT // page offset count // 1 0 5 // 2 5 5 // 3 10 5 // 4 15 5 $offset = COMMENTS_PER_PAGE * ($page - 1); $sql = "select * from comments limit ".$offset.",".COMMENTS_PER_PAGE; $comments = array(); foreach ($dbh->query($sql) as $row) { array_push($comments, $row); } $total = $dbh->query("select count(*) from comments")->fetchColumn(); $totalPages = ceil($total / COMMENTS_PER_PAGE); // var_dump($comments); // exit; $from = $offset + 1; $to = ($offset + COMMENTS_PER_PAGE) < $total ? ($offset + COMMENTS_PER_PAGE) : $total; ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>コメント一覧</title> </head> <body> <h1>コメント一覧</h1> <p>全<?php echo $total; ?>件中、<?php echo $from; ?>件~<?php echo $to; ?>件を表示しています。</p> <ul> <?php foreach ($comments as $comment) : ?> <li><?php echo htmlspecialchars($comment['comment'],ENT_QUOTES,'UTF-8'); ?></li> <?php endforeach; ?> </ul> <?php if ($page > 1) : ?> <a href="?page=<?php echo $page-1; ?>">前</a> <?php endif; ?> <?php for ($i = 1; $i <= $totalPages; $i++) : ?> <?php if ($page == $i) : ?> <strong><a href="?page=<?php echo $i; ?>"><?php echo $i; ?></a></strong> <?php else: ?> <a href="?page=<?php echo $i; ?>"><?php echo $i; ?></a> <?php endif; ?> <?php endfor; ?> <?php if ($page < $totalPages) : ?> <a href="?page=<?php echo $page+1; ?>">次</a> <?php endif; ?> </body> </html>

    • ベストアンサー
    • PHP
  • WordPressで孫ページ一覧を取得

    下記のコードで子ページ一覧を取得していたのですが、子ページ一覧ではなく孫ページ一覧を取得する必要が出てきました。 <?php $parentId = get_the_ID(); $args = 'posts_per_page=-1&post_type=page&orderby=menu_order&post_parent='.$parentId; query_posts($args); if (have_posts()) : while (have_posts()) : the_post(); ?> <div class="child-box"> <a href="<?php the_permalink(); ?>"><img src="<?php echo wp_get_attachment_url( get_post_thumbnail_id() ); ?>" width="190" alt=""></a> <p class="title"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></p> <p>価格:<span class="price"><?php $selling_price = get_field('selling_price'); echo $selling_price."円"; ?></span></p> </div> <?php endwhile;?> <?php wp_reset_query(); ?> <?php else:?> <?php endif;?> 上記のような形で孫ページ一覧を取得する方法をご存知のかた、是非ご教授ください。

    • ベストアンサー
    • PHP
  • オブジェクト指向について

    連続質問で誠に恐縮ですが投稿させて頂きました。 もしTo_aru_User様が拝見したらご協力いただければと思います。 以前の質問でオブジェクト指向で件数の表示とページングの質問をさせて頂きました。 public function getComments($page) {      // 必ず1以上の整数になるようにする   $page = max(1, (int)$page);      // 開始オフセット   $offset = COMMENTS_PER_PAGE * ($page - 1);      // SQL実行   $stmt = $this->pdo->query(sprintf(     implode(' ', array(       'SELECT CALC_FOUND_ROWS *',       'FROM `comments`',       'LIMIT %d, %d',     )),     $offset,     COMMENTS_PER_PAGE   ));      // コメントを取得   $comments = $stmt->fetchAll();      // 現在件数を取得   // (PDOのコンストラクタでMYSQL_ATTR_USE_BUFFERED_QUERYを   // 有効化しているときだけSELECTに対してrowCountメソッドが使える)   $current_count = $stmt->rowCount();      // 総件数を取得   $whole_count = (int)$this->pdo->query('SELECT FOUND_ROWS()')->fetchColumn();      // メッセージ作成   $message = sprintf('全%d件中、%d件から%d件まで表示しています',     $whole_count,     $offset + 1,     $offset + $current_count   );      // 情報を連想配列で返す   return array(     'comments' => $comments,     'message' => $message,   );    } この記述はデータベース接続関連のクラスの中(DB.php)に記述したのですが正解でしょうか? またそれをindex.phpで呼び出そうとしてもうまくいきません。 申し訳ないのですがオブジェクト指向の呼び出しかたを指導していただけませんでしょうか? オブジェクト指向をこのご質問と合わせて勉強しようと思ったのですがPHPも覚えたてでアタフタ状態なので、今回の件をとりあえずちゃんと解決してから基礎からしっかり固めようとおもいます。 大変申し訳ございませんが、お力をお貸しいただけませんでしょうか。 よろしくお願いいたします。

    • ベストアンサー
    • PHP

専門家に質問してみよう