メモ代わり。てきとーに。 いや、ですからてきとーですって。 2年前ぐらいにPythonあたりでメールくれた方、ごめんなさい。メール紛失してしまい無視した形になってしまいました。。。

2009年6月12日金曜日

[Apache Shindig][お勉強] メモ5 Gadgetを表示するまでの流れ

ソース読み中。

Shindigを使って、Gadgetを表示するまでの流れ。


1. iframeで/gadgets/ifr?url=なんたらかんたら
2. /gadgets/ifrはurlパラメータで指定されたURLからGadgetのXMLを取得し、レンダリング。
3. レンダリング結果をiframeにレスポンス。
 

以上。

どうも、レンダリング結果はキャッシュされていないっぽい。
GadgetのXMLが、URLを一意なキーとしてキャッシュされているっぽい。

で、iframe。

http://cwiki.apache.org/SHINDIG/display-a-gadget-in-a-web-page.html
から、コピペ。


<iframe id="remote_iframe_0" src="#{userApplicationBean.iframeUrl}"
scrolling="auto" class="gadgets-gadget" style="display: block;"
frameborder="no" height="400" width="100%" name="remote_iframe_0">
</iframe>
 

な感じのiframeに、

private void generateIframeUrl() throws UnsupportedEncodingException {
Application application = applicationService.getApplication(appid);
title = application.getTitle();
url = application.getUrl();

// generate SecurityToken
String viewerId = viewer;
String ownerId = owner;
String domain = "default";
long moduleId = 0;
String separator = URLEncoder.encode(":", "UTF-8");
String urlEncoded = url.replaceAll(":", "%253A");
urlEncoded = urlEncoded.replaceAll("/", "%252F");
StringBuilder out = new StringBuilder();
out.append(URLEncoder.encode(ownerId, "UTF-8")).append(separator).append(URLEncoder.encode(viewerId, "UTF-8"))
.append(separator).append(Long.toString(appid)).append(separator).append(URLEncoder.encode(domain, "UTF-8"))
.append(separator).append(urlEncoded).append(separator).append(Long.toString(moduleId));

securityToken = out.toString();

// generate iframeUrl
String serverBase = "http://localhost:8080/gadgets/";
String container = "default";
String parent = URLEncoder.encode("http://localhost:8080", "UTF-8");

iframeUrl = serverBase + "ifr?" + "container=" + container + "&mid=" + "0" + "&nocache=" + "1" + "&country="
+ "ALL" + "&lang=" + "ALL" + "&view=" + "canvas" + "&parent=" + parent + "&debug=" + "1" + "&st="
+ securityToken + "&url=" + URLEncoder.encode(url, "UTF-8");
iframeUrl += "#rpctoken=" + getRpcTokenRandom();
}
 

な感じのプログラム。

view=profileとかするとちっちゃくなる。

---
外部のサイトのGadgetにはproxy経由でアクセスするっぽい。
データとかは全て外部のものを使っている気がする。

さて、内部のデータを使う内部のGadgetはどうやるのだろう。

.

0 コメント: