Google App Engine (GAE/J) 使用 Picasa API 取得相簿列表

15 December 2010

不管你在哪裡(GAE、Java Application)要使用Picasa

都一定要reference 4個jar檔,


  1. gdata-core-1.0.jar
  2. gdata-media-1.0.jar
  3. gdata-photos-2.0.jar
  4. google-collect-1.0-rc1.jar


可是Google Code的說明文件卻少說一個,

文件上並沒有叫人家reference第四個,

但是要reference進來才不會有錯

reference進去以後就開始撰寫程式碼了



這邊是以一個固定帳號去做登入

跟之前在GAE中使用行事曆的例子不一樣

那個例子是會有Google登入畫面讓使用者輸入自己的帳號密碼,

然後去存取使用者自己本身的行事曆

不過這個例子不是,這個例子是用寫死的帳號密碼登入

(如果妳一樣要讓使用者填選,那麼也是要用AuthSub來認證,可以去行事曆那個例子看,差不多)


開始撰寫程式碼了

package edu.chao.lab.servlet;

import java.io.IOException;
import java.net.URL;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.google.gdata.client.photos.PicasawebService;
import com.google.gdata.data.photos.AlbumFeed;
import com.google.gdata.data.photos.GphotoEntry;
import com.google.gdata.util.ServiceException;

public class test extends HttpServlet {

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doGet(req, resp);
try {
String strAcc = "你的帳號";
String strPwd = "你的密碼";

PicasawebService service = new PicasawebService("sample");
service.setUserCredentials(strAcc, strPwd); //登入
URL feedUrl = new URL("https://picasaweb.google.com/data/feed/api/user/"+strAcc+"?kind=album");
AlbumFeed myUserFeed = service.getFeed(feedUrl, AlbumFeed.class); //取得所有相簿烈表
List<GphotoEntry> lAlbum = myUserFeed.getEntries();

for (GphotoEntry myAlbum : lAlbum) {
resp.getWriter().println(myAlbum.getTitle().getPlainText());//印出相簿名稱
resp.getWriter().println(myAlbum.getGphotoId()); //印出相簿編號


}
} catch (ServiceException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}







這樣就完成了讀取相簿列表








read more »


如何撰寫一個Chrome App

08 December 2010

今早才看到Chrome Web Store的Chrome App

就覺得這個跟 Chrome Extension一樣

先做先贏,

就想說趕緊來做一個,

去看了一下API,

其實我對Chrome App有點失望...

我覺得根本就只是轉址而已(個人愚見)

爆發點應該會是在Google TV上的應用!

不過對廠商來說,的確是多了一個管道銷售。(更何況是Google幫它銷售)

對廠商來說,有利無弊。

但是對我這種開發者而言,似乎沒有什麼太大意義。

畢竟你還是得先有一個服務(不管是game、小工具)

然後透過Chorme App轉址過去....

好吧,費話不多說,

就直接教學了,

其實Chrome App和Chrome Extension差不多

都是利用json來部屬。

我這裡就直接PO範例了

{
"name": "App的名稱",
"version": "2",
"description": "打你要描述的內容.",
"app": {
"launch": {
"web_url": "http://www.google.com.tw/"
}
},
"icons": {
"128": "icon.png"
}

}



而上傳方式就跟上傳Chrome Extension一樣,

大家可以去參考這篇




















read more »


Android connect to MSN (JML)

07 December 2010

Android connect to MSN (JML)

在Android用Java MSN Messenger Library(JML)登入

其實JML是一個很好用的lib,

在J2SE的環境下使用非常好整合,

BUT...要整合至ANDROID中會有幾個小問題。

第一:會少了一個GetPropertyAction的CLASS

第二:JML裡用的SSL是採取SSLv3,但是android只能支援TLS

第三:一樣會少了一個DatatypeFactory這個CLASS

解決方法就是

直接去找到JML的source code,

直接拿它來做修改,而不是直接去拿jar來用。

為了解決第一部,

我們可以在網路上找到人家寫好的這個class(GetPropertyAction)

來這下載

下載好以後,記得放在package名稱為sun.security.action的底下



解決第二個方法就是

去下載JML的SOURCE CODE

來這下載 (是載.ZIP檔案喔,這樣才會有SOURCE CODE)

下載完成後,把src資料夾底下的net通通拉進來我們的project裡面

拉進來後,畫面會如下





















拉進來以後,

找到package名稱為net.sf.jml.protocol.soap,

點兩下展開以後,

點選class名稱為ContactList的class

打開以後找到下面那行CODE

    SSLContext sc = SSLContext.getInstance("SSLv3");


把它改成下面那行CODE


    SSLContext sc = SSLContext.getInstance("TLS");


這樣第二部就解決了。

至於第三個解決方式,

目前是先把ANDROID SDK設為2.2,

2.2就有支援DatatypeFactory,



接著來寫連結至msn的code了。

其實很簡單,你只要克服上面的問題,

CODE應該就難不倒你,

    try {
final String email = "msn帳號";
final String password = "您的密碼";
final MsnMessenger messenger = MsnMessengerFactory.createMsnMessenger(email,
password);

messenger.getOwner().setInitStatus(MsnUserStatus.ONLINE);

//這邊一定要用thread去執行登入
Thread thread = new Thread(new Runnable() {
public void run() {
messenger.login();
}
});

thread.start();


} catch (Exception e) {
Log.d("msn",e.toString());
}





這樣就完成了MSN登入了。

至於怎麼截取聯絡人清單,只要您解決上面那三個問題

則擷取連絡人,就不是問題了。



read more »