【info】有料サポート(ベータ)限定 承り中 /【JSサポート(仮称)】
【費用】 とりあえず、言い値で承ります。ただし、できる範囲での限定受付です。込み具合等によりお受けできない場合がありますのであらかじめご了承ください。サポートにご納得いただけなければ料金は不要です。 逆に感動したら多くても構いません(^^;;;。
【できること】 たとえば、かも日記で無料配布されているコードのカスタマイズや、あるいは、JavaScript/Ajax全般+Webサーバーとの連携などのアドバイス&サンプル作成等 。A:jQchartなどでWeb用グラフ設置(エクセル→CSVやデータベースからWebグラフ生成)などのアドバイスやカスタマイズサンプル作成。B:ツリーメニューなどのカスタマイズサンプル。C:Google Mapsのカスタマイズ。etc...
【できないこと】 腕立て伏せ200回
【ライセンス】 私が今まで「かも日記」等で提供してきたコードの大半は、商用利用、改造、自由、連絡不要で、今後もそれらは変わりません。そして、この有料サポートによりカスタマイズコードなどが提供される場合でも、同様に、それらを商用利用しても改造しても自由です。ただし、制限のきついライブラリなどを使う場合は、各ライブラリのライセンスに準拠せざるを得ない場合があります。
【info】いつもいろいろなテストなどをページ内のあちこちでやっているので、重かったり、壊れていたりするf^^;ことも多いですが、何卒、ご了承ください ( _ _ b
GAFがあんまり便利なので、ついやってしまう ? といけないので、再度リンクしておきます。
【Webサービス】ブログツールや広告を貼るときの注意(テストサンプルあり)
http://jsgt.org/mt/archives/01/000688.html
要するに、
つまり、この場合、Googleは、APIの機能を無料で提供する代わりに、APIを張り込まれたページすべてを書き換えることも出来る権限を手に入れます。まぁ、Googleを信頼するとしても、パスワードなどをそのページで入力できるようにするのは、個人情報保護法的にもレッドカードではないかな〜?という気がします。もちろん、これはGAFに限らず、ブログツールや広告など他のものにも当てはまるという基礎的?なお話ですけど。
更に、このAPIの場合は、Googleの先のWebサービス(RSSなど)をJSONで出力するわけですから、そこのWebサービス管理者ともページの管理権限をマッシュアップする(笑)ことになります。
基本的には、信頼できるサイトの、既にパブリックなデータを利用するということになると思いますし、とても便利で有用なサービスですが、どこで、どのように使うかは、セキュリティについても考えつつ利用するのが良いかな?と思います。
feed
titlelinkdescriptionauthorentries[]titlelinkcontentelem.innerHTML = entry.content (as opposed to using document.createTextNode). Corresponds to the <content> or <summary> elements in Atom and the <description> element in RSS.contentSnippetcontent attribute. The snippet does not contain any HTML tags.publishedDatenew Date(entry.date). Corresponds to the <published> element in Atom and the <pubDate> element in RSS.categories[]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
<title>Google AJAX Feed API - Simple Example</title>
<script type="text/javascript" src="http://www.google.com/jsapi?key=ここに自分のキー"></script>
<script type="text/javascript">
google.load("feeds", "1");
function initialize() {
var feed = new google.feeds.Feed("http://allabout.co.jp/internet/javascript/rss/index.xml");
feed.load(function(result) {
if (!result.error) {
var container = document.getElementById("feed");
for (var i = 0; i < result.feed.entries.length; i++) {
var entry = result.feed.entries[i];
var div = document.createElement("div");
div.appendChild(document.createTextNode(entry.title));
container.appendChild(div);
}
}
});
}
google.setOnLoadCallback(initialize);
</script>
</head>
<body>
<div id="feed"></div>
</body>
</html>
うちでもやってみました。とりあえず説明付きf(^^;
あんまりAPIないのですけど、ドメイン超えが簡単にできるのでいいですね。
RSSデータ内にCSVデータとか入れて定期的に更新するようにしても面白いかも。
http://www.openspc2.org/JavaScript/Ajax/Ajax_study/index.html
『Ajaxを勉強しよう』もかなり充実してきましたね〜。
Google Maps APIでキーと共通というのは気づかなかったです(^^;。便利ですね。
Google AJAX Feed API Developer Guide
http://code.google.com/apis/ajaxfeeds/documentation/
#GoogleがRSS用のプロクシを用意してくれ、それから応答を引き出すためのAPIをリリースしました、ということ?
ちょっと試してみます(下記、AtomフィードリストはGoogle AJAX Feed API経由の読み込みです)。
>
おお。
=ざっくり和訳=
AJAX Feed APIによって、AtomやRSSフィードをJavaScriptだけで使うことができるようになります。あなたは、それらのフィードと、自分のコンテンツや、他のAPI(たとえば、Google Maps API)を簡単にマッシュアップすることができます。
APIを使うのには、APIキーの申し込みが必要です。
JavaScriptとXMLHttpRequestは、Same origin policyを使用します (訳注:要するに別ドメインとはアクセスできないというあのルール)。これによって、あるクラスのスクリプト用の攻撃からユーザを保護しますが、多くの開発者はAjaxベースのmashupsにそれらを書くことができません(訳注:ので不便です)。
Google AJAX Feed API はウェブで利用可能な内容の特定のタイプのために簡単な回避策をこれらの制限に提供します。
Google AJAX Feed API が、がどうユーザセキュリティを保持するかに関するその他の詳細に関して以下の security notes を見てください。
どんな意味があるかはともかく、、、(^^;; 下記のA地点からB地点までの文章は、HTMLコメントなので、ブログでは表には表示されていませんが、もしRSSリーダー側がAtomのcontent要素をtext解釈すれば表示されます。 [A地点][B地点] 。たとえば、atomのcontentを見るとわかります。でも、MTのRDFのdescription要素やatomのsummary要素は、コメントを削除するのでだめですね。普通のRSSリーダーはそっちを読むぽいですし。
あるいは、JavaScript有効なら、次の[D地点]から[E地点]のように、if(!document)document.write('文字')などとすることで、元サイトで読めず、RDFのdescription要素やatomでもsummary要素で読めるというのも可能かも。 [D地点][E地点] 。
逆にScriptでRSS側を難読化というのもできるかもしれません。次のはエンコードはしていませんが、、、document.write書いた部分を難読化すればよいかなと。 [F地点][G地点]
難読化の手法としては、encodeURIなどだけでは簡単すぎて間違えてデコードされるケースもありうる(笑)ので、まぁ、どうせ簡易な話なので、何でも良いんですが、たとえば、それを更に、自家製エンコードするとかするとか。これなら、サーバー側でたとえば、PHPならrawurlencode()+正規表現とか で自動出力するのも簡単。
ライブドア、Ajaxやキーボードショートカット対応のWeb型RSSリーダー
http://bb.watch.impress.co.jp/cda/news/13666.html
livedoor Reader
http://reader.livedoor.com/
| win | mac | linux | |||||||||
| n7 | m1 | e6 | o7 | o8 | n7 | m1 | e5 | s1 | n7 | m1 | k3 |
| ○ | ○ | ○ | × | ○ | ○ | ○ | × | ○ | ○ | ○ | ○ |
<button onclick="rssOut5()">
www.openspc2.org 古籏さんのブログ</button><br>
<!-- JKL.ParseXMLを読み込む -->
<script type="text/javascript"
src="http://jsgt.org/ajax/ref/test/json/jkl/v0.07/jkl-parsexml.js">
</script>
<script>
<!--
//プログレスバー
var bar
var cnt = 0
//データ
var data5 =""
var url ="http://www.openspc2.org/blog/atom.xml"
//出力用DIV
document.write('<div id="out5" style ="font-size:0.8em;margin:12px;"></div>')
//プレロード
rssPreLoader5('http://jsgt.org/ajax/ref/test/json/jkl/v0.07/getrss.cgi?u='+url)
function rssPreLoader5(url)
{
//プログレスバー開始
document.getElementById('out5').innerHTML = 'pre loading...'
bar = setInterval('progressbar()', 100 )
// JKL.ParseXMLオブジェクトを生成
var xml = new JKL.ParseXML( url );
var func = function ( data5 ) // 呼び出し先関数を定義する
{
onloaded5( data5 ); //コールバック
}
xml.async( func ); // 呼び出し先関数を指定する
xml.parse(); // ダウンロード〜解析〜関数呼び出しする
}
//RSSを受信時に起動するコールバック関数
function onloaded5(xml)
{
data5 =""
//feed要素以下のentry要素を順番に処理
for(i in xml.feed.entry)
{
//出力用HTMLを作る
data5 += '<a href="'+xml.feed.entry[i].link.href+'">'
//24文字に制限
data5 += xml.feed.entry[i].title.substr(0,24)
data5 += '</a>'
data5 += '<br>'
//時間を取り出す
var time = xml.feed.entry[i].issued
time = time.split("T").join(" ").split("+")[0]
data5 += '('+time+')<br>'
}
//プログレスバー停止
clearInterval(bar)
document.getElementById('out5').innerHTML = 'ok now loaded.'
return data5
}
//出力
function rssOut5()
{
//出力
document.getElementById('out5').innerHTML = data5
}
//プログレスバー
function progressbar()
{
document.getElementById('out5').innerHTML += '|'
//タイムアウト処理
if( cnt > 1000 )
{
clearInterval(bar)
document.getElementById('out5').innerHTML += 'load 失敗'
}
cnt ++
}
//-->
</script>
【サーバー側】
#!/usr/bin/perl
#=====================================================================
# 別ドメインのXML取得用簡易プロクシ
#
# example:
# ./getrss.cgi?u=http://jsgt.org/mt/01/atom.xml
#---------------------------------------------------------------------
# Toshirou Takahashi http://jsgt.org/mt/archives/01/000373.html
#
#
#---------------------------------------------------------------------
# GETを取得
#
($dmy2, $url) = split(/u=/, $ENV{'QUERY_STRING'});
#---------------------------------------------------------------------
# RSSデータを取得
#
$url = escapeshellarg($url);
$nkf = "/usr/bin/nkf";
$wget = `/usr/bin/wget -q -O - '$url' | $nkf -w ` ;
#---------------------------------------------------------------------
# 出力
#
print "Content-type: application/xml;charset=utf-8\n\n";
print "$wget";
splitしているだけです。
下記のように、getrss.cgi?u='+url
というGETリクエストを投げていますので、
そのリクエストクエリのu=の後ろのurl部分を、
$urlへ代入しています。
//プレロード
rssPreLoader5('http://jsgt.org/ajax/ref/test/json/jkl/v0.07/getrss.cgi?u='+url)
返信ありがとうございます。
よく読めばわかることでしたね。すみません。
あともう一点わからないです。
var func = function ( data5 ) // 呼び出し先関数を定義する
のところです。
ここで、どうやら落ちてしまうようで、その後の処理を実行してくれません。
funciton(){}では何をしているのでしょうか。
ご教授お願いします。
chisa ( 2005年11月17日 19:08 )返信ありがとうございます。
データへのアクセスの仕方が悪かったみたいです。
どうもでした。
| win | mac | linux | |||||||||
| n7 | m1 | e6 | o7 | o8 | n7 | m1 | e5 | s1 | n7 | m1 | k3 |
| ○ | ○ | ○ | × | ○ | ○ | ○ | × | ○ | ○ | ○ | ○ |
| win | mac | linux | |||||||||
| n7 | m1 | e6 | o7 | o8 | n7 | m1 | e5 | s1 | n7 | m1 | k3.4 |
| ○ | ○ | ○ | × | ○ | ○ | ○ | × | ○ | ○ | ○ | ○ |
<button onclick="rssReader('http://jsgt.org/mt/01/atom.xml')">
最近のエントリー</button><br>
<!-- JKL.ParseXMLを読み込む -->
<script type="text/javascript"
src="http://jsgt.org/ajax/ref/test/json/jkl/v0.07/jkl-parsexml.js">
</script>
<script>
<!--
//プログレスバー
var bar
//メイン関数
function rssReader(url)
{
//プログレスバー開始
document.getElementById('out370').innerHTML = ''
bar = setInterval('progressbar()', 100 )
// JKL.ParseXMLオブジェクトを生成
var xml = new JKL.ParseXML( url );
var func = function ( data ) // 呼び出し先関数を定義する
{
onloaded370( data ); //コールバック
}
xml.async( func ); // 呼び出し先関数を指定する
xml.parse(); // ダウンロード〜解析〜関数呼び出しする
}
//RSSを受信時に起動するコールバック関数
function onloaded370(xml)
{
var data =""
//feed要素以下のentry要素を順番に処理
for(i in xml.feed.entry)
{
//カテゴリがAjaxのみを出力する
if(xml.feed.entry[i]["dc:subject"]=="Ajax")
{
//出力用HTMLを作る
data += '<a href="'+xml.feed.entry[i].link.href+'">'
//24文字に制限
data += xml.feed.entry[i].title.substr(0,24)
data += '</a>'
data += '<br>'
//時間を取り出す
var time = xml.feed.entry[i].issued
time = time.split("T").join(" ").split("+")[0]
data += '('+time+')<br>'
}
}
//プログレスバー停止
clearInterval(bar)
//出力
document.getElementById('out370').innerHTML = data
}
//プログレスバー
function progressbar()
{
document.getElementById('out370').innerHTML += '|'
}
//-->
</script>
<br />
<!-- ここへ出力します -->
<div id='out370'
style ="font-size:0.8em;margin:12px;" ></div>
なにげに、googleを引いていたら、RSScache.comというページがあって「JavaScript++かも日記」がキャッシュされていました。なるほど。
http://www.rsscache.com/Section/Stats/more/1622.aspx