ソース読み中。
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 コメント:
コメントを投稿