推しミネラルウォーターはありますか?

OKWEB/教えて!gooでは、カテゴリー別のフィードがRSSで配信されていますが、最新の5件しか表示されません。これを20件ほどに増やしたいのですが、URLのクエリを編集してできたりするものなのでしょうか?

また、検索結果からもフィードが得れるため 「、 。 , .」でいずれかにマッチする検索を指定カテゴリーから検索し、新着20件としてみました。しかし、カテゴリーのフィードと内容を見比べたことろ、、なぜかいくつかの記事が検索で拾われません。

例えば、このカテゴリーのRSSのURLは、
http://oshiete1.goo.ne.jp/rss.php?c=709
ですが、
同様に、このカテゴリーから「、 。 , .」のいずれかにマッチする質問を新しい順に20件の検索結果のRSSのURLは以下のようになります。
http://oshiete.goo.ne.jp/search/search.php?statu …

しかし、見比べると後者では表示されない記事が、前者のURLでは表示されています。

この違いは何なのでしょうか?また、指定カテゴリーから最新20件を表示させることなど可能でしょうか?どうぞよろしくお願いいたします。

A 回答 (2件)

どうも,#1です。



もし完成したらも何も,
完成しても大した物ではないのです。
単に自分自身が快適生活を送るために作ろうとしていたもので,
他の方にはあまり役立たないように思います。


考えている物のインターフェイスは Flash です。
ですから言語は ActionScript になります。

RSS の XML をロードして変数配列に入れておいて,
一定時間間隔で XML をリロードし,
データに更新があったら,配列データを挿入していくというようなものです。


おそらく開発言語が違うと思いますから,
参考にならないと思いますが,根幹部分のソースコード↓。

//////////////////////////////////////////////////////////////////////////////////////////
// 蓄積データ件数の設定 ※可変
var ken = 20;
// リロード間隔の設定(秒) ※可変
var kankaku = 60;
//
// 蓄積データとなる二次元配列 dataArr の作成
var dataArr = new Array();
for (var i = 0; i<ken; i++) {
 dataArr[i] = new Array();
 // (とりあえず初期値でダミーデータでも入れておく)
 dataArr[i] = [0, 0, 0, 0, 0];
}
// XMLオブジェクト の作成
dataXML = new XML();
//
// ---------------------
// XMLオブジェクト ロード完了時の処理動作
dataXML.onLoad = function(Success) {
 // ロードに成功すれば
 if (Success) {
  // 基本ノードの変数化
  _root.my_root = dataXML.firstChild.firstChild;
  // ノード数の取得して item 数を取得(=5件)
  _root.itemNum = _root.my_root.childNodes.length-13;
  //
  // XML データを 後のデータから順に処理
  for (i=_root.itemNum-1; i>=0; i--) {
   // 配列内に同じデータがあるか検索
   flag = 0;
   for (j=0; j<=_root.ken-1; j++) {
    if (_root.dataArr[j][4] == _root.my_root.childNodes[13+i].childNodes[5].childNodes[0].nodeValue) {
     flag = 1;
     break;
    }
   }
   // 配列内に同じデータがなければ
   if (flag == 0) {
    // 配列の最後の要素を削除
    _root.dataArr.pop();
    // 配列の最初にダミー要素を挿入
    _root.dataArr.unshift([0, 0, 0, 0, 0]);
    // ---
    // dataArr[0][0] に title (タイトル)データを代入
    _root.dataArr[0][0] = _root.my_root.childNodes[13+i].childNodes[0].childNodes[0].nodeValue;
    // dataArr[0][1] に description (本文)データを代入
    _root.dataArr[0][1] = _root.my_root.childNodes[13+i].childNodes[2].childNodes[0].nodeValue;
    // dataArr[0][2] に category (カテゴリ名)データを代入
    _root.dataArr[0][2] = _root.my_root.childNodes[13+i].childNodes[3].childNodes[0].nodeValue;
    // dataArr[0][3] に pubDate (投稿日時)データを代入
    _root.dataArr[0][3] = _root.my_root.childNodes[13+i].childNodes[4].childNodes[0].nodeValue;
    // dataArr[0][4] に guid (ページURL)データを代入
    _root.dataArr[0][4] = _root.my_root.childNodes[13+i].childNodes[5].childNodes[0].nodeValue;
   }
  }
 }
};
//
// -------------------
// XMLオブジェクト に RSS をロードするユーザ定義関数の定義
function loadRSS() {
 // XMLオブジェクト に外部 XML をロード
 dataXML.load("http://oshiete1.goo.ne.jp/rss.php?c=520");
 // 余分な空白や改行を無視
 dataXML.ignoreWhite = true;
}
// ユーザ定義関数 loadRSS の初回実行
loadRSS();
//
// 指定時間間隔で繰りかえし loadRSS を実行
loadID = setInterval(loadRSS, kankaku*1000);
//////////////////////////////////////////////////////////////////////////////////////////

※ インデントを付けるため全角空白文字をたくさん入れています。
  おそらく,そのままご使用になるということはないと思いますが,
  もしコピペすることがありましたら,全角空白文字を
  Tab か半角空白文字に置換するか,削除して使用してください。


ActionScript は見た目 JavaScript に似ていると思います。
JavaScript では簡単に XML が扱えるのかは良く知りませんが,
Flash には XMLクラスのメソッド があるので,
ノードごとのデータの取得などが簡単にできます。
私は,Flash 内のデータは配列の方が操作しやすいので,データは配列に入れています。

上記の例だと,
「恋の悩み・人間関係」カテゴリの RSS をロードします。
http://oshiete1.goo.ne.jp/c520.html
http://oshiete1.goo.ne.jp/rss.php?c=520
別にここのカテゴリでも良かったのですが,
ここはあまり質問がないので,質問の多いカテゴリを選んでみただけです。

起動最初は5件しかデータがありませんが,
しばらくするとデータは20件まで貯まります。


インターフェイス部分は Flash ですから,
配列に入れておいたデータを,
アニメーションで「ニュースティッカー」のように表示しても良いですし,
一覧表のようなものに表示しても良いと思います。
気が向いたようにレイアウトや動きを料理すれば,できあがりということになります。


一応は,配列データが更新されるとともに,
ドラッグで移動可能な付箋紙のような物が,
ランダムな位置に,上の上にペタペタと貼りついていくものを考えています。
ペタペタランダムに貼りつく付箋紙だと,
表示件数を変えたいときも,
表示秒数とか表の大きさだとかを考えなくても良いですよね。
新しい情報が上に上に重なるように表示させるのです。
機能は全く違いますが,イメージとしてはこんな感じです↓。
PostIt (付箋掲示板)
http://www2s.biglobe.ne.jp/~memo/cgi/postit.htm

また,
データが更新されたら音を鳴らすようにするものを考えています。
そして,
興味がわいた質問の付箋紙の一部分をクリックすると,
実際のページを target="_blank" で開くようする予定です。

Windows ではデスクトップの壁紙にHTMLが使用できますから,
その壁紙用のHTMLに Flash を表示させることも可能です。
起動時からのデータがとれます。



実際にしようとしているのは,
本当は上記ものとはスクリプト部分が少し違います。

そもそも作ろうとした動機は,
「私が回答できるご質問になるべく早く回答したい。」
と思ったことです。


私が回答できるものは少ないくせにマニアックなネタも含むため,
「カテゴリ」という枠を超えています。
私も「関心カテゴリ」に幾つかのカテゴリを登録していまが,
「関心カテゴリ」を増やしても,関心のある質問はその網から抜けおちてしまいますし,
「関心カテゴリ」を増やすと関心のない質問が大多数を占めてしまいます。

それに「質問検索」はデータが古いですから,
回答ができる質問を見かけても,
どうしても1日遅れの回答になってしまいます。
検索用語が複数あると検索が面倒です。


上の場合は,

 // 配列内に同じデータがなければ
   if (flag == 0) {
    ~ 省略 ~
    // dataArr[0][0] に title (タイトル)データを代入

のように,
更新データがあるかないかで新データに入れるか入れないかを分岐していますが,
実際はもう少し複雑で,

 自分の関心のある言葉がタイトルもしくは本文にある場合
   または
 本当に関心のあるカテゴリの質問である場合
    ↓
 配列データを更新
    ↓
 更新があっらた付箋紙をペタリ
 そして音楽を鳴らす

そういうフローを考えています。
というか,その程度のものですから,頭の中ではほぼできています。

ロードするデータは「カテゴリRSS」ではなく,「最新の質問RSS」です。



これで,
「回答ができる可能性がある質問」が投稿されれば,
私のPCからお呼びだしがかかるはずですから,
テレビを見ながらでも,
また他のサイトを見ながらでも,
もしくは昼寝をしながらでも,
教えて!goo(OKWave) が楽しめるという寸法です。
使えるのは仕事が休みの日だけですけど。

検索を何度もかけなおしたり,
複数のカテゴリを巡回で見てまわる労力と時間が大幅に削減できますから,
人生を有効に使えるということにもなります。



という自分だけのつまらないガラクタのようなものです。
こういう変な物を作るのが趣味なわけです。
    • good
    • 0
この回答へのお礼

うわぁー。すごいですね!^^
こういったことが結構あっさりできちゃうなんて、うらやましいです。

教えてくださったコードは.swfで保存してブラウザから開けば良いのでしょうか?

とりあえず、応急処置として定期的にデータを読み込みストックしてくれるフィードリーダーを探すことにします。確かgooのリーダーはその機能があったように覚えています。

お礼日時:2007/02/08 07:20

> 見比べると後者では表示されない記事が、


> 前者のURLでは表示されています。
> この違いは何なのでしょうか?

詳しくデータを解析していませんが,
検索結果を表示させるデータは古いでしょう。
少なくともその時点で全然違うと思いますよ。
検索のためのデータは,
毎朝の 6 時頃に集計されて更新されています。


> 指定カテゴリーから最新20件を表示させることなど可能でしょうか?

ヘッ! ムフフフ......(笑)。
しようとされていることがちょっと違いますが,
実は同じようなことを先週辺りから考えていた者です。


先週辺りから考えているので,
情報蒐集もまだ甘い状態ですが,
配信データはなんとなく変えられそうにない気がしています。


ですから....,
とりあえず,RSS配信を受信して表示するプログラム(ソフトと言うべきか)を,
PC起動時から立ち上げさせるようにして,
RSS配信 の XML データをそのプログラム(ソフト)の中に別データとして蓄積しておいて,
そのプログラム(ソフト)を表示させると同時に蓄積されたデータを表示させようかと考えていたところです。
つまり,具体的には,
プログラムを壁紙などに表示させておいて,
その壁紙内プログラムに最初は5件だけど随時件数が増えていって,
20なら20をマックスとして,古いデータから破棄するというような方法です。

これで,2~3時間放置しても,
自分の求めているデータが蓄積されていて,
しばらく目を離しても,
最新 20 件が表示されるので見逃すデータが少なくなるということです。

もっと具体的には,
最初から検索結果データは古く,あてにならないと思っているので,
最新質問のRSSから,プログラムの中でデータに振るいにかけて,
その振るいにかかったデータだけを表示させようかなっと言うようなことです。

もし24時間起動のPCだと,
かなり有効にデータが蓄積されますよ。

現在私はそんなことを考えているところでした。
あまりにもご質問内容が奇遇だったので,
私も中間的な思考中のことですが思わず回答してしまいました。
    • good
    • 0
この回答へのお礼

ありがとうございます。なんだか使えそうな方法ですね!もしやり方が完成したらぜひ教えてください。^^

ただ、こちら24時間立ち上げれるPCがないのが残念です。

お礼日時:2007/02/05 22:31

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