外部ブログの写真を取得して表示させたい - PHPプロ!Q&A掲示板

283

  • 300P

外部ブログの写真を取得して表示させたい

質問日時 / 2006年12月12日 22:49 (最終編集:12月12日 22:53)    回答数 / 10件

Questioner:  yumisaiki  このエントリーをはてなブックマークに追加 

ロリポップのブログサービスで

http://blog.wgpw.jp/

 というブログを作って、便利に使っているのですが、可愛い写真をホームページに流用したいと思って admin画面を一生懸命見ていますが、これはやっぱりムリなのでしょうか?

写真は http://blog.wgpw.jp/images の中にあり、moblog_*****.jpg という名前がついているようですが、規則性がありません。

 ロリポップは PHP4です。

 PHP5にはデレクトリィの内容を読み取るscandir というのがありますが、このブログ内にPHPを設置できないので、例え PHP5であったとしてもファイル内の一覧を自動的にゲットして、それを例えば フラッシュアニメに読込んで自動的に表示させるようなことはできない。

 ですよね。

 やっぱり、めんどうでもサイト内にムーバブルタイプを設置したら可能だったのでしょうか?

 できたらいいなぁというような質問ですみません。 いいアドバイスがあったらお願いします。


ツリー一覧

┣A01dala00以下を調べて頂くと同時に、 教えて頂けると状況が分
┗A02yumisaiki説明不足ですみません。 外部ブログのアクセス権の
 ┗A02-1dala00RSSが使えそうですね。 PEAR::HTTP_Clientを利用す
  ┗A02-1-1yumisaikiすみません。私、PHP本当に初心者なもんで、HTTP_clia
   ┗A02-1-1-1shizk全体の話はちょっとわからないのですが、RSSを文字列
    ┗A02-1-1-1-1yumisaiki$path の設定は どうしたらいいですか? 単純に $p
     ┗A02-1-1-1-1-1shizk単純に、読み込みたいURLをパスに入れて下さい。 php
      ┗A02-1-1-1-1-1-1yumisaikiありがとうございました。 これなら、いろいろ応用で
       ┗A02-1-1-1-1-1-1-1shizkもちろん、上記のコードでは、表示されません。 画像
        ┗A02-1-1-1-1-1-1-1-1yumisaikiあっさり出ました。意味もわかりました。 >>CODE

回答一覧

並び替え:

A01 参考になった
answererdala00 [12月13日 01:44]

以下を調べて頂くと同時に、
教えて頂けると状況が分かるかと思います。

・流用とは具体的にどんなことをするのか。
表示するだけ、プログラムで使いたい、等。
(action scriptがメインですか?
表示するだけなら<img srcでいいと思いますが…)

・プログラム等で使用したい場合、
ブログはpublic_htmlの中に設置されているのか?
もしくは同じサーバー内(かどうかはIPでチェック)にあり、
プログラムでアクセス可能な場所にあるのか?

何に流用するのかが分からないため推測で言いますが、
画像を直接編集するもしくはflashで使う必要があるのでしたら
上記2番目の条件を満たしている必要があると思います。
(画像関数はURLでも使用できたような気がしましたが)

もし直接画像データを編集する必要がなく、
javascriptやhtmlで表示したい場合は
単に<img srcで良いと思います。

この意見に回答する

ツリーへ TOPへ

A02
answereryumisaiki [12月13日 11:11] (最終編集:12月13日 11:14)

説明不足ですみません。

外部ブログのアクセス権のないフォルダ内にどんなファイル名があるかPHPで表示できないだろうかと思ったのです。 

写真のファイル名を取得することができたら、フラッシュに読み込んだりして、オシャレにトップページにランダム表示とかできたら楽しいなと思いました。

低予算のサイトはロリポップでささっと作るのですが、ロリポップは好きな名前をつけたブログサイトを簡単に作れるのです。デザインも変更が細かくできるのでムーバブルタイプをサイト内にインストールするより早いので愛用していました。
 ただ、ムーバブルタイプを使った場合は、ムーバブルタイプが好きな情報を表示させるものを作ることができるので、それが便利なんですね。 

 外部ブログとはいえ、アドミン画面でどんな画像があるかとかいう一覧が見れるのですが、PHPでフォルダ内のファイル名を取得するとかできないなとか。と最初は思ったんです。 アドミン画面を読み込み、jpg画像のIDだけを取得するPHPとかかけないだろうかと?



 でも、今朝、考えなおしたのですが、RSSというものがあるので、RSSを吸い込んで例えばPHPで画像を表示させるだけでもいいかなと思うようになりました。

 でも、でも、自分としては最終的にはhttp://www.blog.wgpw.jp/images/iiiii.jpg というようなファイル名を自動取得して、フラッシュでランダム表示させたいなと。思ったのです。

 RSSをフラッシュで読み込む方法を調べた方がいいかなと。 思ったりして。
 何かアイデアありましたらよろしくお願いします。

 ま、最悪手書きでファイル名を書き込んだらいいことなんですけどね。

この意見に回答する

ツリーへ TOPへ

A02-1 参考になった
replyerdala00 [12月13日 14:06]

RSSが使えそうですね。

PEAR::HTTP_Clientを利用すると
プログラムに管理画面を巡回させて
画像ID取得ができるかもしれません。

その都度画像を調べるよりも上記のいずれかの方法で
1日毎くらいにcronで画像IDをあらかじめ取得しておいて
flashから読みやすい形のリストにして保存しておく、
という手もありそうです。

この意見に回答する

ツリーへ TOPへ

A02-1-1
replyeryumisaiki [12月14日 20:35]

すみません。私、PHP本当に初心者なもんで、HTTP_cliant で調べると

http://www.phppro.jp/phptips/archives/vol13/ が出てきてなるほどなと思いましたが。


IDの取得となると、どうやって特定したらいいんでしょうかねぇ??

RSSを単純に読込んで、.jpeg がついている前の部分を切り出せとかできないでしょうか?

この意見に回答する

ツリーへ TOPへ

A02-1-1-1 満足
replyershizk [12月14日 21:54]

全体の話はちょっとわからないのですが、RSSを文字列として読み込み、正規表現で取り出すことならできます。
画像名が moblog_数字.jpg であると仮定すると

  1. <?php
  2. // URLもしくはファイルへのパスから内容を取り出す
  3. $content = file_get_contents($path);
  4.  
  5. // 正規表現で画像名を抜き出す
  6. $pattern = '/moblog_\d+\.(jpg|jpeg)/i';
  7. $res = preg_match_all($pattern$content$matches);
  8.  
  9. if ($res) {
  10.   $name_list = $matches[0];
  11. } else {
  12.   $name_list = array();
  13. }
  14. ?>

もちろん、RSS内で画像を定義するタグがあれば、RSSを読み込むライブラリを使うと楽になるとは思いますが。

この意見に回答する

ツリーへ TOPへ

A02-1-1-1-1
replyeryumisaiki [12月15日 01:22] (最終編集:12月15日 01:26)

$path の設定は どうしたらいいですか?
単純に
$path = "http://www.wwww.rss"; 

とか最初に挿入するだけでいいんでしょうか?

ちなみに読込みたい
http://blog.wgpw.jp/index.rdf で、

欲しいのは
<img src="images/moblog_57402.jpg" class="pict" alt="" width="240" height="320" />

というように表示されています。

本当にすみません。改造しかしたことがなくて。

読込むだけのプログラムでも書けないのです。

この意見に回答する

ツリーへ TOPへ

A02-1-1-1-1-1 満足
replyershizk [12月15日 04:25] (最終編集:12月15日 04:27)

単純に、読み込みたいURLをパスに入れて下さい。
php.iniファイルの設定で,allow_url_fopenがOnになっていれば大丈夫です。
(PHP初心者なら、これは忘れて下さい)

コードですが、下記のようにすることでimgタグを取得できました。
正規表現を扱ったことがない方には、ちょっと複雑に見えるかもしれませんが、
行っていることは、いたって簡単です。
RSSを文字列として取得し、特定のパターンを抜き出しているだけです。

  1. <?php
  2. // RSSを取得する
  3. $content = file_get_contents("http://blog.wgpw.jp/index.rdf");
  4.  
  5. // 正規表現を用いてimgタグを抜き出す
  6. $pattern = '/<img[\s\t]+src[\s\t]*=[\s\t]*"images\/(moblog_\d+\.jpg)"[^\/>]*?\/?>/';
  7. $res = preg_match_all($pattern$content$matches);
  8.  
  9. if ($res) {
  10.     $tag_list  = $matches[0];
  11.     $name_list = $matches[1];
  12. } else {
  13.     $tag_list  = array();
  14.     $name_list = array();
  15. }
  16. ?>

$tag_listには、imgタグが配列形式で入り、
$name_listには、画像名が同様に入っています。

ただし、RSSフィードから画像を取得すると、既に出力されている画像タグしか取得できません。
これで当初の質問の答えになりましたでしょうか?

この意見に回答する

ツリーへ TOPへ

A02-1-1-1-1-1-1
replyeryumisaiki [12月15日 16:31] (最終編集:12月15日 16:53)

ありがとうございました。
これなら、いろいろ応用できそうです。教えていただいて助かりました。
早速そのままやってみたのですが、何も表示されないのですが…。これはどうしたものでしょう。

http://www.yc.musashi-tech.ac.jp/~yamada/doc/php/0411.html
を見ますと、
preg_match(パターン文字列, 対象文字列, 格納配列)
とあり、 対象文字列が rss そのものというのがうまくないのではないでしょうか?

でもエラーが出ないし。

でも、ヒントにはなりました。

画像タグさえわかれば、それを元にフラッシュに読込みをしていろいろ加工できそうです。

ちなみに、画像を一つだけ表示させるのはどうしたらいいんでしょう?
よかったら教えて欲しいです。

ま、フラッシュの方でひとつだけ表示させたらいいんですけど、

でも、フラッシュを介さずに、htmlに素直に読込んで表示させたら便利かなとか。思いました。

いちいちムーバブルタイプでブログを作らなくても、PHPでRSSを利用して加工したら、いろいろ作れそうですね。 ありがとうがございました。

この意見に回答する

ツリーへ TOPへ

A02-1-1-1-1-1-1-1 満足
replyershizk [12月15日 18:56] (最終編集:12月15日 19:01)

もちろん、上記のコードでは、表示されません。
画像名とタグリストを取得することが目的ですから。

  1. <?php
  2. ・・・
  3. ・・・ // 上記コードの最終行
  4.  
  5. print_r($name_list);
  6. ?>

と、print_r部分を最後に追加してみて下さい。画像名一覧が表示されるはずです。

それから、preg_matchpreg_match_allは、bool値を返します。
ですので、$resにはtrueもしくはfalseが格納されています。
リンク先では

  1. <?php
  2. if (preg_match()) {
  3.   // 処理
  4. }
  5. ?>

とありましたが、これも関数の返り値を基に判定っています。
行っていることは同じですよ。

この意見に回答する

ツリーへ TOPへ

A02-1-1-1-1-1-1-1-1
replyeryumisaiki [12月15日 20:05] (最終編集:12月15日 20:24)

あっさり出ました。意味もわかりました。

  1. <?php
  2.  // RSSを取得する
  3. $content = file_get_contents("http://blog.wgpw.jp/index.rdf");
  4.  
  5. // 正規表現を用いてimgタグを抜き出す
  6.  $pattern = '/<img[\s\t]+src[\s\t]*=[\s\t]*"images\/(moblog_\d+\.jpg)"[^\/>]*?\/?>/';
  7.  $res = preg_match_all($pattern$content$matches);
  8.  
  9.  if ($res) {
  10.      $tag_list  = $matches[0];
  11.     $name_list = $matches[1];
  12. } else {
  13.     $tag_list  = array();
  14.      $name_list = array();
  15.  }
  16.  
  17. $a =0;
  18.  while ($a < 3)
  19.   {
  20.        print($name_list[$a])" \n"."<br>";
  21.        $a++;
  22.        }
  23.  ?>

これで無事 表示できるようになりました。
今回も勉強になりました。 ありがとうございました。

この意見に回答する

ツリーへ TOPへ

<<質問一覧へ



Pick Up Q&A

Q
ログファイルの中の空のデータ行を削除したい
 このエントリーをはてなブックマークに追加 
A
ログのデータ個数(列数)が固定で、空のログが"<><><>"だと既知であれば if ($line === "<><><>") { continue; } で読み飛ばしてもいいのでは? ...

>>続きを読む

まずは配列や文字列の扱いから、じっくり勉強して行きましょう。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)