Facebook4Jで近づくJavaとFacebook Graph API #ccc_r56 #jjug_ccc JJUG CCC 2013 Spring

56
Facebook4J で近づく JavaとFacebook Graph API 山下 竜司 @roundrop #ccc_r56

Transcript of Facebook4Jで近づくJavaとFacebook Graph API #ccc_r56 #jjug_ccc JJUG CCC 2013 Spring

Page 1: Facebook4Jで近づくJavaとFacebook Graph API #ccc_r56 #jjug_ccc JJUG CCC 2013 Spring

Facebook4J で近づく

JavaとFacebook Graph API

山下 竜司 @roundrop

#ccc_r56

Page 2: Facebook4Jで近づくJavaとFacebook Graph API #ccc_r56 #jjug_ccc JJUG CCC 2013 Spring

自己紹介

● 山下 竜司 @roundrop● http://blog.roundrop.jp

● (株)アットウェア● Java, PHP, Javascript, …

● Facebook4J ... http://facebook4j.org● textrans ... http://textrans.roundrop.jp

Page 3: Facebook4Jで近づくJavaとFacebook Graph API #ccc_r56 #jjug_ccc JJUG CCC 2013 Spring

アジェンダ

●Facebook4J について●はじめてのオープンソースを開発・リリースにあたってやったこと・考えたことなど

Page 4: Facebook4Jで近づくJavaとFacebook Graph API #ccc_r56 #jjug_ccc JJUG CCC 2013 Spring

Facebook Graph APIたたいたことありますか?

Page 5: Facebook4Jで近づくJavaとFacebook Graph API #ccc_r56 #jjug_ccc JJUG CCC 2013 Spring

Facebook Graph APIJava で

たたいたことありますか?

Page 6: Facebook4Jで近づくJavaとFacebook Graph API #ccc_r56 #jjug_ccc JJUG CCC 2013 Spring

Facebook Graph API

Application Graph API Facebook

Response: JSON{ "id": "100003403570846", "name": "安倍晋三", "first_name": "晋三", "last_name": "安倍", "link": "https://www.facebook.com/abeshinzo", "username": "abeshinzo", :

ラッパーライブラリ

https://graph.facebook.com/abeshinzo

Page 7: Facebook4Jで近づくJavaとFacebook Graph API #ccc_r56 #jjug_ccc JJUG CCC 2013 Spring

Facebook Graph API がたたけるJava ライブラリ

●facebook4j (Google Code)●https://code.google.com/p/facebook4j/

Page 8: Facebook4Jで近づくJavaとFacebook Graph API #ccc_r56 #jjug_ccc JJUG CCC 2013 Spring

_人人人人人_> 空っぽ < ̄Y^Y^Y^Y ̄

Page 9: Facebook4Jで近づくJavaとFacebook Graph API #ccc_r56 #jjug_ccc JJUG CCC 2013 Spring

Facebook Graph API がたたけるJava ライブラリ

●facebook-java-api●https://code.google.com/p/facebook-java-api/

Page 10: Facebook4Jで近づくJavaとFacebook Graph API #ccc_r56 #jjug_ccc JJUG CCC 2013 Spring

_人人人人人人人_>  しんでる  < ̄Y^Y^Y^Y^Y^ ̄

Page 11: Facebook4Jで近づくJavaとFacebook Graph API #ccc_r56 #jjug_ccc JJUG CCC 2013 Spring

Facebook Graph API がたたけるJava ライブラリ

●RestFB●http://restfb.com/

Page 12: Facebook4Jで近づくJavaとFacebook Graph API #ccc_r56 #jjug_ccc JJUG CCC 2013 Spring

ようやくまともな感じ!でも・・・

Page 13: Facebook4Jで近づくJavaとFacebook Graph API #ccc_r56 #jjug_ccc JJUG CCC 2013 Spring

(おまえら) JavaプログラマはTwitter4Jに慣れすぎている

→ RestFB、OAuth サポートないの?→ RestFB、使い勝手がしっくりこないんだけど?→ RestFB、なんか違う

Page 14: Facebook4Jで近づくJavaとFacebook Graph API #ccc_r56 #jjug_ccc JJUG CCC 2013 Spring

https://twitter.com/vvakame/status/240294658473852928

Page 15: Facebook4Jで近づくJavaとFacebook Graph API #ccc_r56 #jjug_ccc JJUG CCC 2013 Spring

https://twitter.com/yusuke/status/240730650955628545

Page 16: Facebook4Jで近づくJavaとFacebook Graph API #ccc_r56 #jjug_ccc JJUG CCC 2013 Spring
Page 17: Facebook4Jで近づくJavaとFacebook Graph API #ccc_r56 #jjug_ccc JJUG CCC 2013 Spring

Facebook4J リリース

●ソースコード●https://github.com/roundrop/facebook4j

●公式サイト●http://facebook4j.org

Page 18: Facebook4Jで近づくJavaとFacebook Graph API #ccc_r56 #jjug_ccc JJUG CCC 2013 Spring

Facebook4J の特徴

Page 19: Facebook4Jで近づくJavaとFacebook Graph API #ccc_r56 #jjug_ccc JJUG CCC 2013 Spring

Twitter4J ライクな使い勝手

●Facebookインターフェイス

→ メソッド呼び出し のシンプル構造

Facebook facebook = new FacebookFactory().getInstance();facebook.postStatusMessage("Hello World from Facebook4J.");

ちなみにTwitter4Jだと

Twitter twitter = new TwitterFactory().getInstance();twitter.updateStatus("Hello World from Twitter4J.");

Page 20: Facebook4Jで近づくJavaとFacebook Graph API #ccc_r56 #jjug_ccc JJUG CCC 2013 Spring

Twitter4J ライクな使い勝手

●APIの1つ1つをすべてメソッドで提供●タイプセーフ

●例) 自身のユーザー情報を取得

User user = facebook.getMe();

RestFB の場合User user = facebookClient.fetchObject("me", User.class);

文字列! 自分で指定!

Page 21: Facebook4Jで近づくJavaとFacebook Graph API #ccc_r56 #jjug_ccc JJUG CCC 2013 Spring

Twitter4J ライクな使い勝手

●例) ポストした投稿を3件取得

ResponseList<Post> posts = facebook.getFeed(new Reading().limit(3));

RestFB の場合Connection<Post> posts = facebookClient.fetchConnection("me/feed", Post.class, Parameter.with("limit", 3));

! !!

!!!

Page 22: Facebook4Jで近づくJavaとFacebook Graph API #ccc_r56 #jjug_ccc JJUG CCC 2013 Spring

OAuth サポートFacebook facebook = new FacebookFactory().getInstance();response.sendRedirect( facebook.getOAuthAuthorizationURL(callbackURL));

String oauthCode = request.getParameter("code");AccessToken accessToken = facebook.getOAuthAccessToken(oauthCode);

Page 23: Facebook4Jで近づくJavaとFacebook Graph API #ccc_r56 #jjug_ccc JJUG CCC 2013 Spring

OAuth サポート

●サンプルコード

https://github.com/roundrop/facebook4j-oauth-example

Page 24: Facebook4Jで近づくJavaとFacebook Graph API #ccc_r56 #jjug_ccc JJUG CCC 2013 Spring

多くのサポートAPI

●Account

●Activity

●Album

●Checkin

●Comment

●Domain

●Event

●Family

●Favorite

サポート●Friend

●Game

●Group

●Insight

●Like

●Link

●Location

●Message

●Note

●Notification

●Permission

●Photo

●Poke

●Post

●Question

●Subscribe

●User

●Video

●TestUser

●FQL

●Search未サポート

●Page (1.2対応予定)

●Application

●Ads API

●Real-time Updates

●Field Expansion

●Open Graph API

Page 25: Facebook4Jで近づくJavaとFacebook Graph API #ccc_r56 #jjug_ccc JJUG CCC 2013 Spring

メッセージ投稿

facebook.postStatusMessage("hoge");

Page 26: Facebook4Jで近づくJavaとFacebook Graph API #ccc_r56 #jjug_ccc JJUG CCC 2013 Spring

シェアする

PostUpdate post = new PostUpdate(new URL("http://facebook4j.org"))

.picture(new URL("http://~/image.png"))

.name("Facebook4J")

.caption("facebook4j.org")

.description("Facebook4J is ...");

facebook.postFeed(post);

Page 27: Facebook4Jで近づくJavaとFacebook Graph API #ccc_r56 #jjug_ccc JJUG CCC 2013 Spring

ニュースフィードを取得する

ResponseList<Post> feed

= facebook.getHome();

Page 28: Facebook4Jで近づくJavaとFacebook Graph API #ccc_r56 #jjug_ccc JJUG CCC 2013 Spring

いいね!

●Facebook.like****() **** = Post, Photo, Video...

facebook.likePost(postId);

●Facebook.unlike****() **** = Post, Photo, Video...

facebook.unlikePost(postId);

Page 29: Facebook4Jで近づくJavaとFacebook Graph API #ccc_r56 #jjug_ccc JJUG CCC 2013 Spring

コメントする

●Facebook.comment****() **** = Post, Photo, Video...

facebook.commentPhoto(photoId,

"Nice photo!");

Page 30: Facebook4Jで近づくJavaとFacebook Graph API #ccc_r56 #jjug_ccc JJUG CCC 2013 Spring

検索する

●Facebook.search****() **** = Posts, Users, Events...

ResponseList<Post> posts

= facebook.searchPosts("facebook");

ResponseList<User> users

= facebook.searchUsers("john");

:

Page 31: Facebook4Jで近づくJavaとFacebook Graph API #ccc_r56 #jjug_ccc JJUG CCC 2013 Spring

FQL

JSONArray results

= facebook.executeFQL("SELECT ...");

Map<String, String> queries = new ...

queries.put("query1", "SELECT ...");

queries.put("query2", "SELECT ...");

Map<String, JSONArray> result

= facebook.executeMultiFQL(queries);

Page 32: Facebook4Jで近づくJavaとFacebook Graph API #ccc_r56 #jjug_ccc JJUG CCC 2013 Spring

絞り込みなど●特定の項目のみ取得する

// ユーザーのメールアドレスのみ取得

User user = facebook.getUser(userId,

new Reading().fields("email"));●limit/offset

// 11件目~20件目を取得

ResponseList<Post> results

= facebook.searchPosts("facebook",

new Reading().limit(10).offset(10));

Page 33: Facebook4Jで近づくJavaとFacebook Graph API #ccc_r56 #jjug_ccc JJUG CCC 2013 Spring

多くのサポートAPI

●Account

●Activity

●Album

●Checkin

●Comment

●Domain

●Event

●Family

●Favorite

サポート●Friend

●Game

●Group

●Insight

●Like

●Link

●Location

●Message

●Note

●Notification

●Permission

●Photo

●Poke

●Post

●Question

●Subscribe

●User

●Video

●TestUser

●FQL

●Search未サポート

●Page (1.2対応予定)

●Application

●Ads API

●Real-time Updates

●Field Expansion

●Open Graph API

Page 34: Facebook4Jで近づくJavaとFacebook Graph API #ccc_r56 #jjug_ccc JJUG CCC 2013 Spring

その他

●最適化はしていないが●Android●Google App Engine

でも動作するらしい

Page 35: Facebook4Jで近づくJavaとFacebook Graph API #ccc_r56 #jjug_ccc JJUG CCC 2013 Spring

Facebook4JGetting Started

Page 36: Facebook4Jで近づくJavaとFacebook Graph API #ccc_r56 #jjug_ccc JJUG CCC 2013 Spring

1. Facebook上でAppをつくる

●https://developers.facebook.com/apps●適当にAppをつくりApp IDとApp Secretを取得

Page 37: Facebook4Jで近づくJavaとFacebook Graph API #ccc_r56 #jjug_ccc JJUG CCC 2013 Spring

2. Facebook4J の jar を配置

●Maven プロジェクト●pom.xml に以下を記述<dependency> <groupId>org.facebook4j</groupId> <artifactId>facebook4j-core</artifactId> <version>1.1.5</version></dependency>

●非Maven プロジェクト●http://facebook4j.org/download/facebook4j-core-1.1.5.jar

Page 38: Facebook4Jで近づくJavaとFacebook Graph API #ccc_r56 #jjug_ccc JJUG CCC 2013 Spring

3. facebook4j.properties を配置

●facebook4j.properties●以下のように記述debug=trueoauth.appId=****************oauth.appSecret=*************************oauth.accessToken=***************************

※アクセストークンは https://developers.facebook.com/tools/explorer から取得するのがラク パーミッションには全部チェックをつける感じで

●クラスパスに配置

Page 39: Facebook4Jで近づくJavaとFacebook Graph API #ccc_r56 #jjug_ccc JJUG CCC 2013 Spring

4. Facebook4J を使う

●使ってみる●適当にclassをつくり以下のように実装public class F4JGettingStarted { public static void main(String... args) { Facebook facebook = new FacebookFactory().getInstance(); User me = facebook.getMe(); System.out.println(me); }}

Page 40: Facebook4Jで近づくJavaとFacebook Graph API #ccc_r56 #jjug_ccc JJUG CCC 2013 Spring

Facebook4J の今後

Page 41: Facebook4Jで近づくJavaとFacebook Graph API #ccc_r56 #jjug_ccc JJUG CCC 2013 Spring

採用実績

●株なび●https://kabu-navi.jp

●ドイツで使われてる?●イタリアのSNSで使われる予定らしい

Page 42: Facebook4Jで近づくJavaとFacebook Graph API #ccc_r56 #jjug_ccc JJUG CCC 2013 Spring

facebook4j.org アクセス状況

●日本、インド、アメリカ・・・●直近1ヶ月だと日本よりインドからが多い●ヨーロッパからのフィードバックが多い

もっと日本で使われてほしい!

Page 43: Facebook4Jで近づくJavaとFacebook Graph API #ccc_r56 #jjug_ccc JJUG CCC 2013 Spring

ロードマップ

●現在 ver 1.1.5●バクフィックス中心

●ver 1.2.0●ブランチで開発中●主にFacebook Page系API追加

●Android最適化はやくやりたい●jarの軽量化●シングルサインオン

Page 44: Facebook4Jで近づくJavaとFacebook Graph API #ccc_r56 #jjug_ccc JJUG CCC 2013 Spring

はじめてのオープンソースを開発・リリースにあたって

やったこと・考えたことなど

Page 45: Facebook4Jで近づくJavaとFacebook Graph API #ccc_r56 #jjug_ccc JJUG CCC 2013 Spring

開発の動機

●仕事でFacebook連携する機会があった●何かこれつくってますってのがほしかった●○○4J●お手本があったのでできる気がした

●Twitter4J とか●Twitter4J とか

Page 46: Facebook4Jで近づくJavaとFacebook Graph API #ccc_r56 #jjug_ccc JJUG CCC 2013 Spring

自分でもオープンソースがつくれるか?

●全く新しいものを創造●なかなかむつかしい

●難しくないがメンドウなもの●Facebook4J はこっち●あまり高スキルでなくてもこれならできる!

Page 47: Facebook4Jで近づくJavaとFacebook Graph API #ccc_r56 #jjug_ccc JJUG CCC 2013 Spring

ソースコードの流用ってやっていいの?

●ライセンス的にOKなの?●Apache License 2.0 なら、まるっとコピーしてpackage変えるだけな使用方法もOK

(※当然著作権表示等は残したままで)

●ちょこっと変えて使いたい●コピーライトはそのままに、Javadocに変更点を書く

Page 48: Facebook4Jで近づくJavaとFacebook Graph API #ccc_r56 #jjug_ccc JJUG CCC 2013 Spring

Javadocは日本語?英語?

●世界を狙うなら英語●そうじゃないなら日本語

Page 49: Facebook4Jで近づくJavaとFacebook Graph API #ccc_r56 #jjug_ccc JJUG CCC 2013 Spring

コミットログは日本語?英語?

●世界を狙うなら英語●そうじゃないなら日本語

Page 50: Facebook4Jで近づくJavaとFacebook Graph API #ccc_r56 #jjug_ccc JJUG CCC 2013 Spring

英語力ないんだけど?

●辞書・翻訳サイトを使えば、なんとかなる●辞書・翻訳サイトを使えば、文字でのコミュニケーションもなんとかいける

Page 51: Facebook4Jで近づくJavaとFacebook Graph API #ccc_r56 #jjug_ccc JJUG CCC 2013 Spring

Mavenセントラルへの登録どうやってやるの?

●http://samuraism.jp/diary/2012/05/03/1336047480000.html

Page 52: Facebook4Jで近づくJavaとFacebook Graph API #ccc_r56 #jjug_ccc JJUG CCC 2013 Spring

活用したツール

●BitBucket のプライベートリポジトリ●無料●リリースまではBitBucketでソース管理●初回リリース時にGitHubへ移した

●Dropbox●.gitignoreしているファイル●IDEの設定ファイル

→どこでも同じ環境で作業できるように

Page 53: Facebook4Jで近づくJavaとFacebook Graph API #ccc_r56 #jjug_ccc JJUG CCC 2013 Spring

公式サイトづくり

●GitHub Pages●GitHubの静的ファイルホスティング●公式サイト facebook4j.org をホスティング●Jekyll (https://github.com/mojombo/jekyll)

でダイナミックなサイトも構築可能●レイアウト●条件分岐 等

●https://github.com/roundrop/facebook4j.org

Page 54: Facebook4Jで近づくJavaとFacebook Graph API #ccc_r56 #jjug_ccc JJUG CCC 2013 Spring

さあ、帰ったらFacebook4J

使おう!

Page 55: Facebook4Jで近づくJavaとFacebook Graph API #ccc_r56 #jjug_ccc JJUG CCC 2013 Spring

Facebook4Jいつ使うの?

Page 56: Facebook4Jで近づくJavaとFacebook Graph API #ccc_r56 #jjug_ccc JJUG CCC 2013 Spring

ありがとうございました

facebook4j.org