おはようございます。朝早くから質問させていただきます。

他サイトやブログで公開されているrssフィードなどで、タイトルを取得し、公開するいわゆるアンテナサイトというものがありますが

あのようなサイトはどうやって更新されたことを調べているのでしょうか?

つまり、phpのsimplexmlではこちら側(後、A)からxmlファイルを取りにいくだけであり、相手側(後、B)が更新したのち、Aサイトのスクリプトを実行して、xmlフィードを取りに行き、Aサイトを更新するということになると思うのですが、ちらほらとみかけるアンテナサイトなどでは、Bブログが更新されるのとほぼ同時に、Aサイト側にもBブログで更新された記事のタイトルが羅列されております。

このようなライブラリやスクリプト、もしくは関数、またはその方法などが存在するのなら教えていただけないでしょうか?よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

全部RSSフィードを取ってくると、大量のXMLを頻繁に見に行く事が


難しいので、HTMLのヘッダ情報からデータが更新されているかを
を取ってくるのがよいのではないでしょうか。
以下の関数なら、限りなく短い時間で更新時間が分かります。

<?
$time = last_modified("okwave.jp", "/rss.php");

echo date("Y-m-d H:i:s", $time) . "\n";

function last_modified($hostname, $path)
{
$time = -1;

if(!$fp = fsockopen($hostname, 80))
{
return -1;
}

$out = "HEAD http://{$hostname}{$path} HTTP/1.0\n\n";
fwrite($fp,$out);
while (!feof($fp)) {
if(ereg("Last-Modified: (.+)", fgets($fp, 128), $regs))
{
$time = strtotime($regs[1]);
fclose($fp);
return $time;
}
}
fclose($fp);
return $time;
}
?>
    • good
    • 0
この回答へのお礼

ありがとうございます。完璧に実行できました。
このような綺麗なスクリプトを書けるように日々精進していきたいと思います。

それでは、失礼します

お礼日時:2009/05/27 05:41

サイトやブログのRSSフィードを取得すると全てのフィードを取得してしまうことになるので、おそらくXML-RPC等を使用して定期的にPingサーバから更新情報を取得しているのだと思います。



#私自身、Pingサーバから更新情報を受信したことないのであくまで推測ですが・・・。

http://ping.bloggers.jp/api.html

上記URLでAPIを公開しているので一度参照されてはいかがでしょうか?
他のPingサーバでもAPIを公開しているところがあると思います。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。返信が遅くなりまことに申し訳ございません。
pingサーバーのapiについてですが・・・・、どうやら知識と技術不足のため、理解ができずにおわってしまいましたが

このようなやり方もあることを教えてくださり、本当にありがとうございました。

失礼いたします。

お礼日時:2009/05/25 03:39

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qホームページの1記事の更新時間について

wordpressのホームページをやろうと考えているのですが、ホームページビルダーを使っても1記事更新するのすごい時間がかかる(1時間ぐらい)と聞いた事があるのですが、ブログでは直ぐさまに記事更新できますが、本当の事でしょうか?ブログと変わらない更新スピードであればいいのですが、ホームページの場合時間がかかるのであればどのようにすれば少しでも早く更新スピードを上げればいいでしょうか?ご教授下さい。

Aベストアンサー

Webページそのものの更新時間は「ファイルをアップロードした」その瞬間です。

「更新する」と言うのが、「ページを修正する」と言う意味なら、それはそのページ構成と製作者の技量次第。

アップロード後にWebブラウザで見たら「更新する前のページが表示された」と言う場合は、Webブラウザがキャッシュしているファイルが表示されているだけなので、強制的に表示更新させれば、ちゃんと表示出来る。

検索サイトで検索に引っかかるようになるのは、新規サイトなら数ヶ月~半年程度、既存サイトで既に検索サイトで引っかかるような場合は、数時間~数日みておく必要がある。

Q★★xmlの「イコール」の部分のデータを取得するには?(php.simpleXML)★★

<url="API" family="2" genus="42" species="216" mode="Family-List">

例えば、上記のようなXMLデータがあった場合、「family="2"」のデータを取得するにはどのような方法がありますでしょうか?

<url>hoge</url>
のようになっている部分は取得できるのですが、「family="2"」のようなデータの取得方法が分かりません。

simplexml_load_fileで取得しようと考えておりますが、可能でしょうか?

よろしくお願いいたします。

Aベストアンサー

<?php
SimpleXMLElement->attributes() でアクセスできます。
$xml = simplexml_load_file("hoge.xml");
foreach($xml->url[0]->attributes() as $a => $b) {
echo $a,'="',$b,"\"\n";
}
?>

hoge.xml
<url api="API" family="2" genus="42" species="216" mode="Family-List">
hoge
</url>

参考URL:http://manual.xwd.jp/function.simplexml-element-attributes.html

Q免許更新にかかる時間

はじめまして、今度初めて免許更新するものです。
早速なんですが、試験場で免許更新をするとどのくらい時間がかかるのでしょうか?

受付時間は午前8時30分~11時00分と午後1時00分~2時30分の2つあるのは調べて分かりました。さらに、当日の流れも、受付・照会→適性検査→写真撮影→運転者講習→免許交付、と調べたのですが、いったいこれらに全部でどのくらいの時間がかかるのかがわかりません!!

更新した事があるからいましたら是非教えてください!!大体何時ご頃帰れるとか、講習は1時間くらいとか…

Aベストアンサー

免許の色によって講習時間が違います(更新ハガキに記載されています)
私は数ヶ月前に更新でしたがブルーだったので
受付~終了(免許交付)まで約3時間位でした。

QphpのSimpleXMLでXMLの要素を参照したい。

フォームからキーワードを受け取り、それを、xmlを参照しながらphpで出力したいのですが、最後の最後でつまずきます。
------------------
<?php
$doc = new domDocument();
// DOMDocumentオブジェクトにより、インスタンスを生成
$doc->load("./beta.xml");
// ファイルからXML文書を読みこむ
$kywd = $_REQUEST['kywd'];
// フォームからデータを受け取る
$nodelist = $doc->getElementsByTagName('keyword');
// 指定した要素名(keyword)の全ての要素を取得
foreach ($nodelist as $node) {
// 各要素を参照
if($kywd == $node->textContent){
// もし、フォームから受け取ったデータが要素と一致したら
$xurl = $node->namespaceURI;
// 要素の名前空間URLを取得して$xurlに代入
$xml = simplexml_load_file("./beta.xml");
// SimpleXMLによってXMLファイルをパースし、simplexml_elementオブジェクトを作成する
$parent = $xml->children("$xurl");
// 指定したノードの子ノードの配列を取得
$hairetsu = $parent[0]->children("$xurl");
//取得した配列素$hairetsuに代入

foreach($hairetsu as $key=>$value) {
// ちゃんと連想配列になっているか、ためしに出力
print ($key."→".$value."<br />");
}
// 連想配列になっていることを確認
print $hairetsu["title"];
// しかし、キーを指定して値を取得しようとすると、なぜか得られない。
}
}
?>
問題は最後のほうです。連想配列になっていることは確かに確認できる(titleというキーも、その値もある)のですが、連想配列のキーから値を参照しようとすると、なぜか値がNULLになっていて表示できません。私は趣味でプログラミングをする程度なので、おそらく基本的なところで間違っているのだと思いますが、それがどこだか分かりません。お教え願えないでしょうか。

フォームからキーワードを受け取り、それを、xmlを参照しながらphpで出力したいのですが、最後の最後でつまずきます。
------------------
<?php
$doc = new domDocument();
// DOMDocumentオブジェクトにより、インスタンスを生成
$doc->load("./beta.xml");
// ファイルからXML文書を読みこむ
$kywd = $_REQUEST['kywd'];
// フォームからデータを受け取る
$nodelist = $doc->getElementsByTagName('keyword');
// 指定した要素名(keyword)の全ての要素を取得
foreach ($nodelist as $node) {
// ...続きを読む

Aベストアンサー

#1>「キーワード」を参照して「タイトル」を得たい
余計なお世話かもしれませんが、
この場合、「タイトル」は、キーワードの親ノードの子ノードなので、いちいち、名前空間で限定する必要は無いように思います。
そして、DOMだけで操作できます。
例えばこんな感じ。
----------------------------------------------------------------
<?php
#encoding UTF-8
$doc = new domDocument();
$doc->load("./beta.xml");
$kywd = 'ポータルサイト';#$_REQUEST['kywd'];
$nodelist = $doc->getElementsByTagName('keyword');
foreach ($nodelist as $node) {
if($kywd == $node->nodeValue){
$titles = $node->parentNode->getElementsByTagName('title');
$title = $titles->item(0)->nodeValue;
print mb_convert_encoding($title,"SJIS","UTF-8") . "\n";#必要に応じて文字コード変換
}
}
?>
----------------------------------------------------------------
元のプログラム(を試してはいませんが)でうまくいかない理由は、多分文字コードに起因するもの、あるいはsimpleXMLの構造の勘違いではないかと思います。

#1>「キーワード」を参照して「タイトル」を得たい
余計なお世話かもしれませんが、
この場合、「タイトル」は、キーワードの親ノードの子ノードなので、いちいち、名前空間で限定する必要は無いように思います。
そして、DOMだけで操作できます。
例えばこんな感じ。
----------------------------------------------------------------
<?php
#encoding UTF-8
$doc = new domDocument();
$doc->load("./beta.xml");
$kywd = 'ポータルサイト';#$_REQUEST['kywd'];
$nodelist = $doc->getElementsB...続きを読む

QCGIゲームの更新時間って何ですか?

僕が借りようと思っているレンタルサーバーで
CGIゲームについての欄で
『更新時間は、10分以上でお願いします。』
と言う記述があったのですが
ここで言う更新時間とは何ですか?
わかる方教えてください。

Aベストアンサー

たとえば箱庭諸島2というゲームであればデフォルトは6時間です。
つまり、何らかの変化や動作がある(可能になる)時間をさすものとおもいます。

更新時間の意味はサーバーによっても違いますし、禁止されているCGIを見たり(利用規約やFAQなどにあります)、サーバーにお問い合わせをしてみるのもいいと思います。

更新時間が長くても1度に大量の処理を行なうものは禁止されていることもあります(箱庭諸島等)

QSimpleXML関数で取得したXML要素を逆順にしたい

SimpleXML関数で取得したXML要素を逆順にしたい

お世話になります。
phpのsimplexml関数で取得したXML要素を
逆順にして表示させるにはどうしたらよいでしょうか?
通常、RSSなどを読み込み表示させた場合、新しいものから並ぶと思いますが、
これを逆順で古いほうから並ばせたいです。
rsortやarray_reverseを使ってみましたが、うまくいきませんでした。
よろしくお願いします。

Aベストアンサー

生成したsimplexmlオブジェクト自体をソートしようとするから
出来ないんじゃないでしょうか。
simplexmlオブジェクトでパースしたnodeの配列を、なんらかの条件で
usortで自分で並べ替えればよいと思います。

$string = <<<XML
<?xml version='1.0'?>
<root>
<items><no>1</no></items>
<items><no>2</no></items>
<items><no>3</no></items>
<items><no>4</no></items>
</root>

$xml = simplexml_load_string($string);
$items = $xml->items;
function cmp($a, $b)
{
if ($a->no == $b->no) {
return 0;
}
return ($a->no > $b->no) ? -1 : 1;
}
usort($items,"cmp");

Qディレクトリ内にあるファイルの最終更新時間を取得したい

指定したディレクトリ内に自動生成されて保存されるファイルの最終更新時間を取得したいと思っています。

hogeというディレクトリがあったとして
この中に200511.logというファイルがあり日々更新されて行きます。
ただし、月が変わると200512.logと新しいファイルが生成されてまた更新されて行くような感じです。
この場合、ただ
<?php echo "最終更新: " . date("Y-n-d", filemtime('hoge/200511.log')); ?>
とすれば、当月は良いのですが、来月になったら更新されなくなってしまいます。
ディレクトリの時間でやってみたらどうかと思い、
<?php echo "最終更新: " . date("Y-n-d", filemtime('hoge/')); ?>
とやってみましたが、これだと、ただ単にhogeというディレクトリ自体の更新が表示されてしまいました。(当たり前か。。)

つまりやりたい事は、hogeディレクトリ内でなにか変化が起きたらその時間を表示したい、ということなのですが、どうすれば良いでしょうか?

指定したディレクトリ内に自動生成されて保存されるファイルの最終更新時間を取得したいと思っています。

hogeというディレクトリがあったとして
この中に200511.logというファイルがあり日々更新されて行きます。
ただし、月が変わると200512.logと新しいファイルが生成されてまた更新されて行くような感じです。
この場合、ただ
<?php echo "最終更新: " . date("Y-n-d", filemtime('hoge/200511.log')); ?>
とすれば、当月は良いのですが、来月になったら更新されなくなってしまいます。
ディレクト...続きを読む

Aベストアンサー

既に解決済みでしょうか・・


$filename = exec("ls -c1 hoge/");

で一番最後にファイルステータスを更新したファイル名を取得できますので、これを元に処理をしてみてはどうでしょうか。

Qsimplexml_load_file で呼び出した外部XMLファイルのテキストが文字化けする

Shift-JISで書いたPHPページにて、以下のように外部XMLファイルを呼び出していますが、文字化けしてしまいます。。

<?php
 $rss = simplexml_load_file('http://example.jp/feed/');
 echo '<ul id="feed">';
 foreach($rss->channel->item as $item){
 $title = $item->title;
 $date = date("Y年 n月 j日", strtotime($item->pubDate));
 $link = $item->link;
 $description = mb_strimwidth (strip_tags($item->description), 0 , 50, "… ", "utf-8");
?>

 <li>
  <p class="date"><?php echo $date; ?></p>
  <h3><a href="<?php echo $link; ?>"><?php echo $title; ?></a></h3>
  <p class="body"><?php echo $description; ?><a href="<?php echo $link; ?>" class="ml15">続きを見る &raquo;</a></p>
 </li>

<?php } echo '</ul>'; ?>

「続きを見る »」だけは日本語表示されますが、それ以外が文字化けしてしまいます…。
いくらググっても解決できずでどなたかご教授ください…( ノД`)

Shift-JISで書いたPHPページにて、以下のように外部XMLファイルを呼び出していますが、文字化けしてしまいます。。

<?php
 $rss = simplexml_load_file('http://example.jp/feed/');
 echo '<ul id="feed">';
 foreach($rss->channel->item as $item){
 $title = $item->title;
 $date = date("Y年 n月 j日", strtotime($item->pubDate));
 $link = $item->link;
 $description = mb_strimwidth (strip_tags($item->description), 0 , 50, "… ", "utf-8");
?>

 <li>
  <p class="date"><...続きを読む

Aベストアンサー

呼び出すページの文字コードが元のページと違うのでは?
XMLの基本はUTF8なので、元ページをUTF8でつくっておいて
呼び出し後にSJISに変換して表示してみてはいかがでしょうか?

Qシート内で変更があった場合に、更新日付・時間を表示

エクセルで”値の更新(Vlookupを使ってブックリンクしています)”後、
値に変化があった場合、更新された日付・時間を表の「A2」箇所に
表示させたい場合は、どうすればよいでしょうか。

WEBからコピペした下記マクロを使ってみました。
---------------------------------------------------------------------
Function LastSaveTime()

Application.Volatile
LastSaveTime = ThisWorkbook.BuiltinDocumentProperties("Last save time").Value

End Function
---------------------------------------------------------------------

こちらですと、直接セルに文字を入力した場合は更新時間が変化するのですが、
ブックリンクの”値の更新”で再計算された場合には、時間が変更されませんでした。
値の更新後、値に変化があった場合にも日時が更新されるようにするには
どうしたらよろしいでしょうか。


上手く説明ができず、申し訳ございませんが宜しくお願い致します。

エクセルで”値の更新(Vlookupを使ってブックリンクしています)”後、
値に変化があった場合、更新された日付・時間を表の「A2」箇所に
表示させたい場合は、どうすればよいでしょうか。

WEBからコピペした下記マクロを使ってみました。
---------------------------------------------------------------------
Function LastSaveTime()

Application.Volatile
LastSaveTime = ThisWorkbook.BuiltinDocumentProperties("Last save time").Value

End Function
----------------------------------------...続きを読む

Aベストアンサー

こんばんは!
外していたらごめんなさい。

操作したいSheet見出し上で右クリック → コードの表示 → VBE画面に↓のコードをコピー&ペーストしてみてください。

Private Sub Worksheet_Calculate()
With Range("A2")
.Value = DateValue(Now()) + TimeValue(Now())
.NumberFormatLocal = "yyyy/m/d h:mm:ss"
End With
End Sub

ではどうでしょうか?
尚、日付・時間表示は好みによって変更してみてください。m(__)m

QPEAR XML_Query2XMLを利用したPHPからFlash(AS3)へのXMLデータの渡し方について。

毎度お世話になっております。
前回させていただいた質問で、PHPからFlashへのデータ受け渡しをしたいと考えていたところ、XML形式がいいと教えていただき、試していました。

FlashのただのXMLファイルの読み込みはでき、PHPのPEAR XML_Query2XMLを利用してデータベースのデータをXMLに整形することも出来ました。
しかし、その後の連結的な操作が分からず戸惑っております。
お時間があるときでよろしいので、何を使ったらよいかなどアドバイス等を頂ければと思います。
よろしくお願いします。

環境
Flash CS3(AS3)
PHP5.2.6
MySQL5.1.29
Apache2.2.10


・PHPの今のところのプログラム

<?php
// include required files
include 'XML/Query2XML.php';
include 'MDB2.php';

try {
// initialize Query2XML object
$q2x = XML_Query2XML::factory(MDB2::factory('mysql://ユーザ名:パスワード@localhost/データベース名'));

// generate SQL query
// get results as XML
$sql = "SELECT * FROM table名";
$xml = $q2x->getFlatXML($sql);

// send output to browser
header('Content-Type: text/xml');
$xml->formatOutput = true;
echo $xml->saveXML();
} catch (Exception $e) {
echo $e->getMessage();
}
?>


・AS3の今のところのプログラム

System.useCodePage = true;

// 外部XMLはURLLoaderで読み込む
var myLoader:URLLoader = new URLLoader();

myLoader.addEventListener(Event.COMPLETE, completeData);
myLoader.load(new URLRequest("test.xml"));

// 読み込み完了後の処理
function completeData(event:Event):void {

// 読み込んだ文字列をmyXMLに入れる
var myXML:XML = new XML(myLoader.data);

// データのnameとpriceの値をリストアップ表示
trace(myXML.drink[1].name);

for (var i = 0; i < myXML.drink.length(); i++) {;

//ダイナミックテキストでi番目を表示
db.text = myXML.drink[i].name
trace(myXML.drink[i].name);
trace(myXML.drink[i].@price);

}

}

よろしくお願いします^^

毎度お世話になっております。
前回させていただいた質問で、PHPからFlashへのデータ受け渡しをしたいと考えていたところ、XML形式がいいと教えていただき、試していました。

FlashのただのXMLファイルの読み込みはでき、PHPのPEAR XML_Query2XMLを利用してデータベースのデータをXMLに整形することも出来ました。
しかし、その後の連結的な操作が分からず戸惑っております。
お時間があるときでよろしいので、何を使ったらよいかなどアドバイス等を頂ければと思います。
よろしくお願いします。

環境
...続きを読む

Aベストアンサー

1.phpからの出力を確認してtest.xmlと同様になっているのを確認
2.FLASH側でphpを呼び出す
  myLoader.load(new URLRequest("http://hoge/hoge.php"));
以上でよいです、ちゃんとwebサーバーないとだめですけど


人気Q&Aランキング

おすすめ情報