http://wiki.developerforce.com/index.php/Chatter_Code_Recipes
上記掲載のChatterCodeRecipesを実際に検証しましたので、翻訳と注釈を記載しました。
Visualforce Page
<apex:inputText value="{!status}" id="status" maxlength="100" />
<apex:commandLink style="button" value="Update User Status" action="{!doUserStatus}" />
Custom Controller
public string status { get; set; }
public PageReference doUserStatus() {
User user = [select id, CurrentStatus from User where id = :UserInfo.getUserId()];
user.CurrentStatus = status;
update user;
return null;
}
Visualforce Page
<apex:image id="profileImage" url="{!profileImageUrl}" />
Custom Controller
public string profileImageUrl { get; set; }
profileImageUrl = [select FullPhotoUrl from User where Id = '1234'];
※実際の戻り値は「https://XXXXX.force.com/profilephoto/729U00000004Oz6/F」
Visualforce tags
<chatter:followers entityId="User Id or record Id"/> <chatter:feedWithFollowers entityId="User Id or record Id"/>
SOQL query
List<EntitySubscription> followers =
[select id, subscriberid, subscriber.name
from EntitySubscription
where parentid =:uid]; // the id of the user/record for which you want to list followers
Integer noOfFollowers = followers.size();
※<chatter:followers entityId=”User Id or record Id”/>と<chatter:feedWithFollowers entityId=”User Id or record Id”/>は同一画面には使用できない。
・

・<chatter:feedWithFollowers entityId=”User Id or record Id”/>を指定した場合は、ホームタブのChatter部品が表示される
※サンプルのSOQLはフォロワーの人数を算出している。
SOQL query
// Everyone you're following
EntitySubscription[] followingES = [select id, parentid, subscriberid, parent.name
from EntitySubscription
where subscriberid =:uid];//Set to the User's Id
List<EntitySubscription> following = new List<EntitySubscription> ();
String userSObjectPrefix = User.sObjectType.getDescribe().getKeyPrefix();
for( EntitySubscription es: followingES )
{
if( ('' + es.parentid).substring(0,3) ==
userSObjectPrefix) // users only
{
following.add(es);
}
}
Integer followingUserCount = following.size();
※上記処理では、ユーザがフォローしているデータを取得後、Userデータのみを抽出している。
抽出方法としてはIDの頭文字3桁で判断する。(実行環境では”005″となっていた)
※フォロワー一覧のように標準部品は用意されていない。
<chatter:follow entityId="User or Record Id that you want to follow"/>
Apex code
EntitySubscription follow = new EntitySubscription (
parentId = '<User Record Id you want to follow'
subscriberid = :UserInfo.getUserId); //your User Id
insert follow;
※Visualforce tagでは指定したユーザ/データの状況により、下記どちらかの部品が表示される。


※Apex Codeでは指定したユーザ/データをフォローする旨だが、上記コードではエラーとなる。
正しくは下記。
EntitySubscription follow = new EntitySubscription (); follow.parentId = 'User Record Id you want to follow'; follow.subscriberid = UserInfo.getUserId(); //your User Id insert follow;
//Adding a Text post FeedItem post = new FeedItem(); post.ParentId = oId; //eg. Opportunity id, custom object id.. post.Body = 'Enter post text here'; insert post; //Adding a Link post FeedItem post = new FeedItem(); post.ParentId = oId; //eg. Opportunity id, custom object id.. post.Body = 'Enter post text here'; post.LinkUrl = 'http://www.someurl.com'; insert post; //Adding a Content post FeedItem post = new FeedItem(); post.ParentId = oId; //eg. Opportunity id, custom object id.. post.Body = 'Enter post text here'; post.ContentData = base64EncodedFileData; post.ContentFileName = 'sample.pdf'; insert post;
※FeedItemクラスについては、APIバージョン21.0以降で使用可能。
FeedComment fcomment = new FeedComment(); fcomment.FeedItemId = fId; //Id of the FeedItem on which you want to comment fcomment.CommentBody = 'Enter your comment here'; insert fcomment;
List<NewsFeed> myfeed = [SELECT Id, Type,
CreatedById, CreatedBy.FirstName, CreatedBy.LastName,
ParentId, Parent.Name,
Body, Title, LinkUrl, ContentData, ContentFileName,
(SELECT Id, FieldName, OldValue, NewValue
FROM FeedTrackedChanges ORDER BY Id DESC),
(SELECT Id, CommentBody, CreatedDate,
CreatedBy.FirstName, CreatedBy.LastName
FROM FeedComments ORDER BY CreatedDate LIMIT 10),
(SELECT CreatedBy.FirstName, CreatedBy.LastName
FROM FeedLikes)
FROM NewsFeed
ORDER BY CreatedDate DESC, Id DESC
LIMIT 20];
List<AccountFeed> myfeed = [SELECT Id, Type,
CreatedById, CreatedBy.FirstName, CreatedBy.LastName,
ParentId, Parent.Name,
Body, Title, LinkUrl, ContentData, ContentFileName,
(SELECT Id, FieldName, OldValue, NewValue
FROM FeedTrackedChanges ORDER BY Id DESC),
(SELECT Id, CommentBody, CreatedDate,
CreatedBy.FirstName, CreatedBy.LastName
FROM FeedComments ORDER BY CreatedDate LIMIT 10),
(SELECT CreatedBy.FirstName, CreatedBy.LastName
FROM FeedLikes)
FROM AccountFeed
WHERE ParentID = '<Account Id>'
ORDER BY CreatedDate DESC, Id DESC
LIMIT 20];
※商談のFeedの場合は「OpportunityFeed」、カスタムオブジェクトのFeedは「カスタムオブジェクトAPI名__Feed」となる。
List<ContentDocumentLink> shares = [SELECT id, LinkedEntityId, ContentDocumentId
FROM ContentDocumentLink
WHERE ContentDocumentId = '<File Id>'];
※File Idについては必ず指定
Apex code
trigger CheckChatterPostsOnOpportunity on FeedItem (before insert) {
//Get the key prefix for the Opportunity object via a describe call.
String oppKeyPrefix = Opportunity.sObjectType.getDescribe().getKeyPrefix();
for (FeedItem f: trigger.new)
{
String parentId = f.parentId;
//We compare the start of the 'parentID' field to the Opportunity key prefix to
//restrict the trigger to act on posts made to the Opportunity object.
if (parentId.startsWith(oppKeyPrefix) &&
f.Body == '!close')
{
//Add business logic here
}
}
}
Apex code
trigger MonitorUserStatusUpdates on User (before update) {
for (Integer i = 0; i < trigger.new.size(); i++)
{
if (trigger.old[i].CurrentStatus != trigger.new[i].CurrentStatus)
{
//User has changed their Chatter status - take necessary action here.
}
}
}
Apex code
//Note that this code can only be executed by a user with the 'Insert System Field Values //for Chatter Feeds' permission FeedItem post = new FeedItem(); post.ParentId = oId; //eg. Opportunity id, custom object id.. post.Body = 'Enter post text here'; post.CreatedById = <Salesforce User Id of the original post author>; post.CreatedDate = <Date and time of original post>; insert post; FeedItem f = [select InsertedById from FeedItem where id =:post.Id]; System.assertEquals (f.InsertedById, UserInfo.getUserId());
Chatter Cheat Sheetを一通り検証し日本語に翻訳をしました。
※翻訳に誤ってる箇所がありましたらコメントにて指摘を頂けると助かります。
※「Chatterで使用している標準オブジェクト」と一緒にご覧ください。
Chatter Data Model
Chatterで使用する主なモデルは下記となります。

これら上記モデルがChatterデータの大部分を占めています。
これらを総称してfeed itemsと呼びます。
ですがfeed itemsに全てのChatterデータが格納されるわけではありません。
コメントはFeedComment、フィードの詳細についてはFeedTrackedChangeに格納されます。
またこれらはUserProfile、NewsFeedから必要情報を取得して参照可能となります。
Feed Items
このオブジェクトはNewsFeed、UserProfileFeed、record feedsからできています。
Type項目は、何の情報であるかを意味します。(TextPost, LinkPost,ContentPost, TrackedChangeなど)
TrackedChangeの場合にはFeedTrackedChangeに詳細情報が格納されていいます。
これら以外のTypeの場合にはAccountFeed,CollaborationGroupFeed,NewsFeedのいずれかにデータが格納されています。
またフィードの情報はそれぞれ何によって作成されたかといった情報を持っています。
例えば自分のプロフィールを変更した際に作成されるプロフィール変更のフィードには自分のUserIDがParentIDとしてセットされます。
| 項目 | 説明 |
|---|---|
| Type | UserStatusのいずれかがセットされる。(TextPost, LinkPost, ContentPost,TrackedChange) |
| CreatedDate | feedの作成日 |
| CreatedById | feedを作成したユーザのID |
| InsertById | 基本的には作成したユーザIDだが、API等を経由して作成した場合は異なるIDがセットされる。 |
| ParentId | feedに関連するID |
Record Feeds
Record Feedsは基本的に殆どのfeed情報が格納されています。
全てのfeed情報にFeedItemIDがあり、このIDを使用してUserProfileFeed、NewsFeedを取得することができます。
| 項目 | 説明 |
|---|---|
| FeedItemId | feedのID |
| Body | 投稿内容やユーザのプロフィール変更の情報がセット |
| LinkURL | リンクを指定した際にセットされるリンクのURL |
| Title | リンクやコンテンツのタイトル |
| ContentType | コンテンツのMIME-TYPE |
| ContentSize | コンテンツのファイルサイズ |
| ContentFileName | コンテンツのファイル名 |
| ContentDescription | コンテンツの詳細説明 |
| ContentData | コンテンツの実態(Base64-encoded) |
| CommentCount | フィードに対するコメントの件数 |
| LikeCount | フィードに対する「いいね」の件数 |
Create a new Text Post
FeedItem fItem = new FeedItem(); fItem.Type = 'TextPost'; fItem.ParentId = <Id of User or Record>; fItem.Body = 'The mice will see you now'; insert fItem;
Typeについては変更できません。詳細はCurrentStatusを参照してください。
追加したデータは下記のページで確認できます。
Record Feeds – FeedTrackedChanges
フィードの変更があったオブジェクト(ユーザやデータ)については、変更情報をrecord feedsに保持しています。
Record Feedsは標準オブジェクト用の名前が付与されます。例えばAccountはrecord feedを表すAccountFeedオブジェクトがあります。
カスタムオブジェクトについては、Foo__cが持ってるrecord feedsはFoo__Feedといった形になります。
項目が変更された等の詳細についてはFeedTrackedChangeに格納されます。
OpportunityFeed Feed Items on a Record
ID OpportunityId = <Id of an opportunity>; List<OpportunityFeed> oRFeed = [ SELECT Id, Type, CreatedBy.Name, Parent.Name, Body FROM OpportunityFeed WHERE ParentId = :OpportunityId ORDER BY CreatedDate DESC, Id DESC LIMIT 20 ];
Record Detail Page Query
ID accountId = <Id of an Account>; List<AccountFeed> aRFeed = [ SELECT Id, Type, CreatedDate, CreatedById, CreatedBy.Name, ParentId, Parent.Name, FeedItemId, Body, Title, LinkUrl, (SELECT Id, FieldName, OldValue, NewValue FROM FeedTrackedChanges), (SELECT Id, CreatedDate, CreatedById, CreatedBy.Name, CommentBody FROM FeedComments ORDER BY CreatedDate DESC) FROM AccountFeed WHERE ParentId = :accountId ORDER BY CreatedDate DESC, Id DESC LIMIT 10 ];
このQueryはAccountレコードの詳細を表示するために使用します。
このクエリを少々変えることで、AccontFeedと異なるrecord feedを一緒に表示することも可能です。
結果についてはProfile Tab Queryでも記述しています。
NewsFeed
このオブジェクトは自分の投稿、フォローしているユーザの投稿、所属しているグループの投稿情報が格納されています。このオブジェクトはChatterタブに表示されています。
feedのParentIdにはユーザのID、フォローしているユーザのID、所属グループのIDがセットされます。
NewsFeedは自分自身の情報の閲覧可能です。
| 項目 | 説明 |
|---|---|
| FeedItemId | feedのID |
| ParentId | feedに関連するID |
| Type | UserStatusのいずれかがセットされる。 |
注意:
もしAcmeが私をフォローしたfeedを、私をフォローしているJACKが見た場合、ParentIDにはAcmeが設定されています。
誰による投稿か確認する場合はCreatedBy(システム項目)を使用します。
NewsFeed Feed Items on Users and Records I Follow
List <NewsFeed> aNewsFeed = [ SELECT Id, Type, CreatedBy.Name, Parent.Name, Body FROM NewsFeed ORDER BY CreatedDate DESC, Id DESC LIMIT 20 ];
下記の例は使用中のChatterタブに表示されているフィードから省略したデータを戻します。
CreatedBy.Nameはフィードを作成したユーザを表示するため指定します。
Parent.Nameは使用ユーザ名またはフォローしているアイテム名が設定されます。
また対象フィードのTypeがTrackedChangeでない限り、nullとなる事はありません。
Chatter Tab Query
List <NewsFeed> aNewsFeed = [ SELECT Id Type CreatedDate ParentId Parent.Name FeedItemId Title LinkUrl (SELECT Id FieldName OldValue FROM FeedTrackedChanges) (SELECT Id CreatedDate CreatedById CreatedBy.Name CommentBody FROM FeedComments ORDER BY CreatedDate DESC) FROM NewsFeed ORDER BY CreatedDate DESC Id DESC LIMIT 10 ];
UserProfileFeed
このオブジェクトは自分の投稿、プロフィールの変更情報および@を使用したダイレクトメッセージ情報が格納されています。
またこのフィード情報はSalesforce Chatterアプリケーションのプロファイルタブに表示されています。
UserProfileFeedのフィード情報では作成ユーザの情報を閲覧する事も可能です。
注意:UserProfileFeedを参照する場合、条件にUserIDが必須となります。
UserProfileFeed Feed Items indicating Posts a User has Made
ID userID = <id of User>; List <UserProfileFeed> uposts = [ SELECT Id FROM UserProfileFeed WHERE Type = 'TextPost' WITH UserId=:userId ORDER BY CreatedDate DESC, Id DESC LIMIT 10 ];
このクエリでは指定したユーザに関連する直近10件の投稿情報を戻しています。
WITHを使用してどのユーザのプロファイル情報を取得するか指定します。
上記の例でWHERE句を省略した場合はType=trackedchangesを含んだレコードが戻ります。
ParentIdには更新したオブジェクトのIDがセットされています。
Profile Tab Query
ID userID = <id of User>; List <UserProfileFeed> = [ SELECT Id Type CreatedDate ParentId Parent.Name FeedItemId Title LinkUrl LikeCount (SELECT Id FieldName OldValue FROM FeedTrackedChanges) (SELECT Id CreatedDate CreatedById CreatedBy.Name CommentBody FROM FeedComments ORDER BY CreatedDate DESC) FROM UserProfileFeed WITH UserId = :userId ORDER BY CreatedDate DESC Id DESC LIMIT 10 ];
このクエリではプロファイルタブの表示データを取得しています。
フィードに対して、コメントや「いいね」が紐付いてる場合には、1レコードに対して複数のリスト型のデータが戻ってきます。
またフィードのTypeがtrackedchangesの場合には、FeedTrackedChangeオブジェクトに関連するデータが格納され、プロファイル情報の更新ごとのレコードが作成されています。
なので、プロファイルを変更するユーザはFeedTrackedChangeオブジェクトを更新する権限が必要となります。
FeedTrackedChange
各フィードの変更情報が格納されています。このオブジェクトを参照する場合にはUserProfileFeed、NewsFeed、record feedを通じて行ってください。
Tracked Changes to a Record
ID OpportunityId = <Id of an opportunity>; List<OpportunityFeed> oEFeedT = [ SELECT Id Type CreatedBy.Name (SELECT OldValue NewValue FROM FeedTrackedChanges) FROM OpportunityFeed WHERE ParentId = :OpportunityId AND Type = 'TrackedChange' ORDER BY CreatedDate DESC Id DESC LIMIT 20 ];
上記の例は商談オブジェクトの変更情報を抽出しています。
FeedComment
このオブジェクトにはコメント情報が格納されています。
コメントは各フィードの子オブジェクトとなっており、UserProfileFeedやNewsFeedと紐付けての取得のみ可能となっています。
また投稿データのIDはユーザの変更により変わる可能性があるため、ParentIDを使用してどのオブジェクトに紐付いてるか確認することができます。
Create a Comment
FeedComment fcomment = new FeedComment(); fcomment.FeedItemId = <feedItemId>; fcomment.CommentBody = 'This is a profound comment.'; insert fcomment;
上記の例を行うには、コメントを付加するFeedのItemIDが必要となります。
EntitySubscription
このオブジェクトでは、ユーザ/データのフォロー/フォロワーの関係が格納されています。
Followers of a User or Record
ID uid = <Id of User or Record>; List<EntitySubscription> followers = [ SELECT Id, SubscriberId, Subscriber.Name FROM EntitySubscription WHERE ParentId = :uid ];
List the Users and Records I Follow
ID uid = <Id of User>; EntitySubscription[] followingES = [ SELECT Id, ParentId, SubscriberId, Parent.Name FROM EntitySubscription WHERE SubscriberId = :uid ];
WHERE句にParent.Type=’User’を付加することでユーザのみ表示することが可能です。
List Subscriptions to Records
ID uid = <Id of User>; List<EntitySubscription> les = [ SELECT Id, Parent.Name FROM EntitySubscription WHERE SubscriberId = :uid AND ParentId IN (SELECT Id FROM Account WHERE NumberOfEmployees >= 10) ];
上記の例は、従業員が10人以上取引先企業でフォローしているデータが取得できます。
CollaborationGroup
このオブジェクトにはChatterのグループ情報が格納されています。
CollaborationGroupにはCollaborationGroupFeedと呼ばれるGroup内のフィード情報を格納したデータを持っており、グループに所属するフィードを取得する際に使用します。
List Groups
List<CollaborationGroup> oG = [SELECT Name, Description, CollaborationType, OwnerId from CollaborationGroup];
上記の例では、組織内全てのChatterグループを取得しています。CollaborationTypeにはPublicかPrivateのいずれかが設定されています。
List a Group’s Feed
ID cgid = <Id of a group>; List<CollaborationGroupFeed> ic = [ SELECT Id, Type, ParentId, Parent.Name, FeedItem.Id, FeedItem.Type , FeedItem.Body, FeedItem.Title, (SELECT Id, FieldName, OldValue, NewValue FROM FeedTrackedChanges ORDER BY Id DESC), (SELECT Id, CommentBody, CreatedDate, CreatedById, CreatedBy.FirstName, CreatedBy.LastName FROM FeedComments ORDER BY CreatedDate DESC, Id DESC LIMIT 4) FROM CollaborationGroupFeed WHERE ParentId = :cgid ORDER BY CreatedDate DESC, Id DESC LIMIT 20 ];
グループの名前や説明を変更した際には、変更情報が表示されます。
上記の例ではグループのフィード・変更情報および付随するコメントを取得しています。
CollaborationGroupMember
このオブジェクトにはChatterグループのメンバー情報が格納されています。
List Members of a Group
ID cg = <Id of a Chatter group>; List<CollaborationGroupMember> oM = [ SELECT MemberId, CollaborationGroup.Name FROM CollaborationGroupMember WHERE CollaborationGroupId = :cg ];
上記の例では、指定したグループのメンバーIDと名称を取得します。
Add a User to a Group
ID uid = <Id of a user>; ID cgid = <Id of a group>; CollaborationGroupMember cgm = new CollaborationGroupMember( memberid = uid, collaborationgroupid = cgid); insert cgm;
CollaborationGroupMemberRequest
このオブジェクトでは、非公開グループにおけるユーザの申請情報が格納されています。
また自分が管理者となっているグループにおいては、承認・却下の操作も可能です。
create()を使用することで、グループの管理者に対して申請メールを送る事ができます。
グループの管理者による承認・却下を行った際に、申請者にメールで通知されます。
また却下の場合は理由を通知する事が可能です。
CurrentStatus
ユーザがChatterで投稿を行った際には、UserオブジェクトのCurrentStatusが更新されます。
またUserProfileFeedにおいても更新が行われます。
Update a User’s Status
ID uid = <Id of User>; User user = [SELECT Id, CurrentStatus FROM User WHERE Id = :uid]; user.CurrentStatus = 'new and exciting status message'; update u;
上記の例ではユーザ投稿の更新を行います。
注意:ユーザ投稿を削除した場合、CurrentStatusの値はクリアされません。
Chatter Triggers
FeedItem、FeedCommentではApexTriggerを作成する事ができます。
record feedにおいては作成できませんが、ユーザの行動のrecord feedにおいては作成可能です。
Triggerは追加・削除のみ対応しています。FeedItemのTypeがTextPost,LinkPost,ContentPostの追加時に行うことができます。
ユーザのステータス情報更新ではTriggerは動作しません。
Apex CodeではChatterコンテキスト内の処理のみ追記可能です。
トリガーを使用して非公開グループに対して投稿を行う際には、グループに所属しているメンバーでなければなりません。
グループに所属していないメンバーの場合は、CreatedByIdにメンバーのIDがセットされFeedItemが作成されます。
下記の例では、誰かが投稿を行った時に動作するTriggerです。
例えば特定の文字に基づいて処理を実施することもできます。
(例:商談がクローズとなった場合に処理を行う。)
Trigger CheckChatterPostsOnOpportunity on FeedItem (before insert)
{
// Get the key prefix for the Opportunity object
// using a describe call.
String oppKeyPrefix = Opportunity.sObjectType.getDescribe().
getKeyPrefix();
for (FeedItem f: trigger.new)
{
String parentId = f.parentId;
// Compare the start of the 'parentID' field
// to the Opportunity key prefix to
// restrict the trigger to act on posts made to the
// Opportunity object.
if (parentId.startsWith(oppKeyPrefix) &&
f.Body == '!close')
{
// Add your business logic here
}
}
}
Writing Efficient Chatter Triggers
ContentDocumentLink
ContentDocumentLinkではSalesForceCRMやChatterにアップされたファイルが、Chatterで共有された情報が格納されます。
ファイルは他のユーザ、Chatterグループ、SalesForceCRMと共有する事ができます。
例えばChatterでアップロードを行ったファイルのタイトル、説明を検索する事ができます。
SELECT ContentDocument.LatestPublishedVersion.Title, ContentDocument.LatestPublishedVersion.Description FROM ContentDocumentLink WHERE LinkedEntityid = '<entity-id>'
CollaborationInvite
このオブジェクトを使用する事でChatterに招待/削除ができます。
招待ではChatter(グループなし)またはChatter内グループのいずれかとなります。
Chatter内グループに招待する事でChatter(グループなし)の閲覧も可能となります。
招待されたユーザはグループ内のプロファイルやフィードの閲覧は可能ですが、他のデータについては閲覧できません。
Writing Efficient SOQL Queries
Chatterで使用する主な標準オブジェクトは下記となります。

UserProfileFeed
ユーザのプロフィール、ユーザのフィード変更情報が格納。条件にWITH UserId=’***’が必須。
| 項目名 | 注釈 |
|---|---|
| Id | フィードのID |
| Body | 投稿内容 |
| CommentCount | コメントの件数 |
| ContentData | コンテンツファイル(Base64で変換した値) |
| ContentDescription | コンテンツの説明 |
| ContentFileName | コンテンツファイル名 |
| ContentSize | コンテンツサイズ(in byte) |
| ContentType | コンテンツのMIMEType |
| CreatedDate | フィード作成日 |
| FeedPostId | フィードの投稿ID(バージョン22で廃止) |
| InsertedById | 作成したユーザまたはデータのID |
| IsDeleted | True:削除、False:既存 |
| LastModifiedDate | 最終更新日 |
| LikeCount | 「いいね」件数 |
| LinkUrl | リンクのURL |
| ParentId | このフィードの親となるユーザまたはデータのID |
| RelatedRecordId | ※現状取得不可 |
| Title | フィードのタイトル |
| Type | 下記のいずれかより設定される。 UserStatus:ユーザがChatterタブやホームタブで投稿したフィード TrackedChange:プロフィールやグループの変更時に自動的に作成されたフィード TextPost:ユーザが他ユーザやオブジェクトより投稿したフィード LinkPost:ユーザが投稿したフィードのリンク情報 ContentPost:ユーザが投稿したフィードのファイル情報 DashboardComponentSnapshot:ダッシュボードが更新された際に作成されたフィード ApprovalPost:承認を実施した際に作成されるフィード |
NewsFeed
Chatter内全体のデータが参照できる。非公開としているグループのデータも参照可能
| 項目名 | 注釈 |
|---|---|
| Id | フィードのID |
| Body | 投稿内容 |
| CommentCount | コメントの件数 |
| ContentData | コンテンツファイル(Base64で変換した値) |
| ContentDescription | コンテンツの説明 |
| ContentFileName | コンテンツファイル名 |
| ContentSize | コンテンツサイズ(in byte) |
| ContentType | コンテンツのMIMEType |
| CreatedDate | フィード作成日 |
| InsertedById | 作成したユーザまたはデータのID |
| IsDeleted | True:削除、False:既存 |
| LastModifiedDate | 最終更新日 |
| LikeCount | 「いいね」件数 |
| LinkUrl | リンクのURL |
| ParentId | このフィードの親となるユーザまたはデータのID ※通常はユーザID、ファイルをアップした際はコンテンツのID、グループ作成時のIDはグループID |
| RelatedRecordId | ※現状取得不可 |
| Title | フィードのタイトル |
| Type | UserProfileFeedを参照 |
CollaborationGroupFeed
グループで発信しているFeedの情報が格納
| 項目名 | 注釈 |
|---|---|
| Id | フィードのID |
| Body | 投稿内容 |
| CommentCount | コメントの件数 |
| ContentData | コンテンツファイル(Base64で変換した値) |
| ContentDescription | コンテンツの説明 |
| ContentFileName | コンテンツファイル名 |
| ContentSize | コンテンツサイズ(in byte) |
| ContentType | コンテンツのMIMEType |
| CreatedDate | フィード作成日 |
| FeedPostId | フィードの投稿ID(バージョン22で廃止) |
| InsertedById | 作成したユーザまたはデータのID |
| IsDeleted | True:削除、False:既存 |
| LastModifiedDate | 最終更新日 |
| LikeCount | 「いいね」件数 |
| LinkUrl | リンクのURL |
| ParentId | グループのID |
| RelatedRecordId | 関連するレコードID。 |
| Title | フィードのタイトル |
| Type | UserProfileFeedを参照 |
UserFeed(record feed)
ユーザに関するフィードのみ集約されている。(オブジェクトのフィードはなし)
| 項目名 | 注釈 |
|---|---|
| Id | フィードのID |
| Body | 投稿内容 |
| CommentCount | コメントの件数 |
| ContentData | コンテンツファイル(Base64で変換した値) |
| ContentDescription | コンテンツの説明 |
| ContentFileName | コンテンツファイル名 |
| ContentSize | コンテンツサイズ(in byte) |
| ContentType | コンテンツのMIMEType |
| CreatedDate | フィード作成日 |
| FeedPostId | フィードの投稿ID(バージョン22で廃止) |
| InsertedById | 作成したユーザまたはデータのID |
| IsDeleted | True:削除、False:既存 |
| LastModifiedDate | 最終更新日 |
| LikeCount | 「いいね」件数 |
| LinkUrl | リンクのURL |
| ParentId | このフィードの親となるユーザまたはデータのID |
| RelatedRecordId | 関連するレコードID。 |
| Title | フィードのタイトル |
| Type | UserProfileFeedを参照 |
AccountFeed(record feed)
取引先におけるフィード情報(LeadFeed、ContactFeedも類似)
| 項目名 | 注釈 |
|---|---|
| Id | フィードのID |
| Body | 投稿内容 |
| CommentCount | コメントの件数 |
| ContentData | コンテンツファイル(Base64で変換した値) |
| ContentDescription | コンテンツの説明 |
| ContentFileName | コンテンツファイル名 |
| ContentSize | コンテンツサイズ(in byte) |
| ContentType | コンテンツのMIMEType |
| CreatedDate | フィード作成日 |
| FeedPostId | フィードの投稿ID(バージョン22で廃止) |
| InsertedById | 作成したユーザまたはデータのID |
| IsDeleted | True:削除、False:既存 |
| LastModifiedDate | 最終更新日 |
| LikeCount | 「いいね」件数 |
| LinkUrl | リンクのURL |
| ParentId | 取引先ID |
| RelatedRecordId | ※現状取得不可 |
| Title | フィードのタイトル |
| Type | UserProfileFeedを参照 |
FeedTrackedChange
フィードの変更があったオブジェクト(ユーザやデータ)を保持。直接オブジェクトの参照はできない。
| 項目名 | 注釈 |
|---|---|
| Id | 変更オブジェクトのID |
| CurrencyIsoCode | ※現状取得不可 |
| FeedItemId | フィードのID |
| FieldName | 変更があった項目の名前 |
| NewValue | 新しい値 |
| OldCurrencyIsoCode | ※現状取得不可 |
| OldValue | 前の値(新規の場合はnull) |
FeedComments
フィードに対するコメント情報
| 項目名 | 注釈 |
|---|---|
| CommentBody | コメントの内容 |
| FeedItemId | 対応するフィード |
| InsertedById | コメントを作成したユーザまたはアプリ等のID |
| ParentId | このフィードの親となるユーザまたはデータのID |
FeedLikes
フィードに対する「いいね」情報
| 項目名 | 注釈 |
|---|---|
| CreatedById | 「いいね」を行ったユーザID |
| FeedItemId | 対応するフィード |
| FeedEntityId | フィードかコメントのID(将来的にコメントに「いいね」が可能となるため)(※現状取得不可) |
| InsertedById | 「いいね」を作成したユーザまたはアプリ等のID |
FeedPost
バージョン21において削除。FeedItemに移行。
FeedItem
使用する際には必ずIDを条件にセットする必要がある。
| 項目名 | 注釈 |
|---|---|
| Id | フィードのID |
| Body | 投稿内容 |
| CommentCount | コメントの件数 |
| ConnectionId | ※現状取得不可 |
| ContentData | コンテンツファイル(Base64で変換した値) |
| ContentDescription | コンテンツの説明 |
| ContentFileName | コンテンツファイル名 |
| ContentSize | コンテンツサイズ(in byte) |
| ContentType | コンテンツのMIMEType |
| FeedPostId | フィードの投稿ID(バージョン22で廃止) |
| InsertedById | 作成したユーザまたはデータのID |
| IsDeleted | True:削除、False:既存 |
| LikeCount | 「いいね」件数 |
| LinkUrl | リンクのURL |
| ParentId | このフィードの親となるユーザまたはデータのID |
| RelatedRecordId | ※現状取得不可 |
| Title | フィードのタイトル |
| Type | UserProfileFeedを参照 |
EntitySubscription
Chatterにおけるフォロー・フォロワーの関係情報
| 項目名 | 注釈 |
|---|---|
| Id | フォロー関係ID |
| ParentId | フォローされているデータ |
| SubscriberId | フォローしているデータ |
CollaborationGroup
組織内に存在するグループ情報
| 項目名 | 注釈 |
|---|---|
| CanHaveGuests | True/False 承認していないユーザの閲覧権限(※現状取得不可) |
| CollaborationType | Public、Privateのいずれか |
| Description | グループの説明 |
| FullPhotoUrl | フルサイズ画像のURL |
| HasPrivateFieldsAccess | 非公開グループの際にグループの情報タイトル/詳細の閲覧権限(※現状取得不可) |
| InformationBody | グループの情報詳細(※現状取得不可) |
| InformationTitle | グループの情報タイトル(※現状取得不可) |
| LastFeedModifiedDate | グループ内の最終フィード更新日 |
| MemberCount | メンバーの人数 |
| Name | グループ名 |
| OwnerId | グループ管理者のユーザID |
| SmallPhotoUrl | サムネイル画像のURL |
CollaborationGroupMember
組織内に存在するグループの所属メンバー情報
| 項目名 | 注釈 |
|---|---|
| CollaborationGroupId | グループID |
| MemberId | グループに所属しているユーザID |
| NotificationFrequency | グループから発信するダイジェストメールの頻度 D:Daily W:Weekly N:Never P:On each post |
CollaborationGroupMemberRequest
ユーザがグループに所属申請を実施した場合に作成されるデータ
| 項目名 | 注釈 |
|---|---|
| CollaborationGroupId | 申請されたグループのID |
| RequesterId | 申請したユーザのID |
| ResponseMessage | 申請却下時に管理者が入力するメッセージ |
| Status | Accepted、Declined、Pendingのいずれか |
CollaborationInvitation
Chatterに同僚をメールで招待した際に作成される情報
| 項目名 | 注釈 |
|---|---|
| InvitedUserEmail | ラベル付きメールアドレス(XXXX |
| InvitedUserEmailNormalized | メールアドレスのみ |
| InviterId | 招待を行ったユーザID |
| OptionalMessage | 送信メッセージ |
| ParentId | このフィードの親となるユーザまたはデータのID |
| SharedEntityId | 招待を行ったChatter内の機能のID(ユーザID、グループのID等) |
| Status | Sent、Accepted、Canceledのいずれか |
ContentDocument
組織内において、CRMやChatterでアップロードしたファイルの情報
| 項目名 | 注釈 |
|---|---|
| Division | 組織内のファイルのDivision(※現状取得不可) |
| LatestPublishedVersionId | 最新のファイルバージョンID |
| OwnerId | ファイルをアップしたユーザID |
| PublishStatus | P(公開データ)、R(個人データ)、U(アップロード失敗)のいずれか |
| Title | ファイルアップ時のタイトル名 |
ContentDocumentLink
アップロードされたファイルのリンク情報
| 項目名 | 注釈 |
|---|---|
| LinkedEntityId | ファイルをアップしたユーザID |
| ContentDocumentId | コンテンツのファイルID |
先日の「F8」において様々な新機能が発表され、更に躍進を見せるFaceBookですが
ここでAPEXによる基本的なFaceBookGraphAPIの使用方法をまとめてみました。
①アクセストークン取得の流れ

1.Webアプリ上から、下記URLにGETパラメータを付加して、FaceBookの認証画面にリダイレクトを行います。
<認証ダイアログURL>
https://graph.facebook.com/oauth/authorize
| パラメータ名 | 値 |
|---|---|
| client_id | AppID |
| redirect_uri | FaceBook認証画面からリダイレクトされるURL |
| scope | 使用するGraphAPIの権限(カンマ区切り) |
PageReference pFbLogin = new PageReference('https://graph.facebook.com/oauth/authorize?client_id=AppID&redirect_uri=http%3A%2F%2Fsample.com%2F&scope=offline_access,read_stream');
return pFbLogin.setRedirect(true);
ログイン済みであれば下記のようなダイアログが表示されます。
(ダイアログの例では使用するGraphAPIの権限を全て設定した場合)

2.認証画面にてユーザが許可した場合、GETパラメータにcodeが付加された形式でリダイレクトされるので、下記URLにアクセスしAccessTokenを取得します。
<AccessToken取得URL>
https://graph.facebook.com/oauth/access_token
| パラメータ名 | 値 |
|---|---|
| client_id | アプリ登録画面で表示されたAppID |
| client_secret | アプリ登録画面で表示されたAppSecret |
| code | GETパラメータ”code”の値 |
Http h = new Http();
Httprequest req = new Httprequest();
req.setEndpoint('https://graph.facebook.com/oauth/access_token?client_id=AppID&client_secret=AppSecret&code=code');
req.setMethod('GET');
HttpResponse res = h.send(req);
3.上記の戻り値(res.getBody())が”access_token=アクセストークン”の形式で戻ってくるので、この値を保持しGraphAPIのアクセス時に使用します。
※アプリのアクセストークンについてはGraphAPIにおいてUser情報のme/accountsから取得できます。
(後述参照)
②GraphAPI全体概要
| 名前 | 注釈 | 取得 | 更新 | AccessToken | |
|---|---|---|---|---|---|
| User | App | ||||
| Achievement(Instance) | Facebookアプリ(ゲーム)において、ユーザの実績(得点や進捗)を操作することが目的。 | ○ | ○ | △ | △ |
| Album | 写真アルバムの情報取得および作成。 | ○ | ○ | ○ | - |
| Application | 登録済みのAppに対して情報取得および更新が可能。アプリの新規作成/削除はAPIではできない。 | ○ | △ | - | - |
| Checkin | チェックインIDを指定する事で場所やページのチェックイン情報の取得が可能。 | ○ | ○ | ○ | - |
| Comment | コメントIDを指定する事でコメントの情報取得、削除が可能。 | ○ | ○ | ○ | - |
| Domain | パラメータにFaceBookアプリ内で使用しているドメインを指定する事で情報取得。 | ○ | - | - | - |
| Event | イベントIDを指定しイベントの情報取得。 | ○ | ○ | ○ | - |
| FriendList | 友達リストIDを指定し友達リストの情報取得。 | ○ | ○ | ○ | - |
| Group | グループIDを指定しグループの情報取得。 | ○ | ○ | ○ | - |
| Insights | 管理しているFaceBookページやアプリのIDを使用して、各種統計情報が取得可能。 | ○ | - | - | ○ |
| Link | 投稿されたリンクのIDを指定する事で情報取得が可能。 | ○ | - | ○ | - |
| Message | メッセージIDを指定する事で情報取得が可能。(現在はAPI開発中で今後機能拡張が行われる予定) | ○ | - | ○ | - |
| Note | ノートIDを指定する事で情報取得が可能。 | ○ | - | ○ | - |
| Page | ページIDを指定する事で情報取得が可能。(ページで取得できる項目については、今後ユーザの年齢や管理者のみの制限、特殊ページにおける項目追加が発生するかもしれない) | ○ | ○ | ○ | - |
| Photo | 写真IDを指定する事で情報取得が可能。 | ○ | ○ | ○ | - |
| Post | フィードに表示されている個々の情報のIDを指定する事で、フィード上に表示されない情報が取得可能。 | ○ | △削除のみ | ○ | - |
| Review | アプリIDを指定する事でレビュー情報が取得可能。 | ○ | - | - | - |
| Status message | ウォールに表示されている個々の情報に対して、GraphAPIで扱われるステータス情報が取得可能。 | ○ | - | ○ | - |
| Subscription | ページ・アプリで使用している情報をリアルタイムに取得する事が可能。 | ○ | - | - | ○ |
| Thread | 将来リリースされる新しいメッセージシステム | ○ | - | ○ | - |
| User | ユーザの情報。ユーザIDを指定する事で各情報の取得が可能。 | ○ | ○ | ○ | - |
| Video | 動画IDを指定する事で動画情報が取得可能。(ファイルの対応形式は本家リファレンス参照) | ○ | - | ○ | - |
③APIのURIおよび戻り値
・APIの種類
| 名前 | 注釈 | User | Page | App | |||
|---|---|---|---|---|---|---|---|
| 自分 | 友達 | 他人 | いいね!有 | いいね!無 | |||
| accounts | 所有するアプリ、ページのデータを取得 | ○ | ‐ | ‐ | ‐ | ‐ | △ |
| achievements | 使用しているFacebookアプリ(ゲーム)の実績データ | ○ | ‐ | ‐ | ‐ | ‐ | ○ |
| activities | プロフィールの好きなアクティビティデータ | ○ | ○ | ‐ | ‐ | ‐ | ‐ |
| admins | ページ管理データ(ページのアクセストークンを使用する) | ‐ | ‐ | ‐ | △管理者のみ | ‐ | ‐ |
| albums | アルバムデータ | ○ | ○ | ‐ | ○ | ○ | ○ |
| apprequests | 使用しているFacebookアプリからの通知データ | ○ | ‐ | ‐ | ‐ | ‐ | ‐ |
| banned | ページ管理者がブロックしているユーザリスト(ページのアクセストークンを使用する) | ‐ | ‐ | ‐ | ‐ | ‐ | △管理者のみ |
| blocked | ページ管理者がブロックしているユーザリスト(ページのアクセストークンを使用する) | ‐ | ‐ | ‐ | △管理者のみ | ‐ | ‐ |
| books | プロフィールで選択した好きな本 | ○ | ○ | ‐ | ‐ | ‐ | ‐ |
| checkins | チェックインの一覧 | ○ | ○ | ‐ | ○ | ○ | ‐ |
| events | イベントの一覧 | ○ | ○ | ‐ | ○ | ○ | ‐ |
| family | 家族の一覧 | ○ | ○ | ‐ | ‐ | ‐ | ‐ |
| feed | ユーザの投稿一覧 | ○ | ○ | ○ | ○ | ○ | ○ |
| friendlists | 作成した友達リスト一覧(スマートリストも含まれる) | ○ | ‐ | ‐ | ‐ | ‐ | ‐ |
| friendrequests | 承認していない友達リクエストの一覧 | ○ | ‐ | ‐ | ‐ | ‐ | ‐ |
| friends | 友達一覧 | ○ | ‐ | ‐ | ‐ | ‐ | ‐ |
| games | プロフィールで選択した好きなエンターテイメント | ○ | ○ | ‐ | ‐ | ‐ | ‐ |
| groups | 所属するグループの一覧 | ○ | ‐ | ‐ | ○ | ○ | ‐ |
| home | 自分のホームに表示されているフィード一覧 | ○ | ‐ | ‐ | ‐ | ‐ | ‐ |
| inbox | メッセージの一覧 | ○ | ‐ | ‐ | ‐ | ‐ | ‐ |
| insights | 管理しているFaceBookページやアプリの各種統計情報 | ‐ | ‐ | ‐ | ‐ | ‐ | △管理者のみ |
| interests | プロフィールで選択した好きな趣味・関心 | ○ | ○ | ‐ | ‐ | ‐ | ‐ |
| likes | 「いいね!」の一覧 | ○ | ○ | ‐ | ‐ | ‐ | ‐ |
| links | 自分の投稿にリンクがあるデータのみ抽出した一覧 | ○ | ○ | ‐ | ○ | ○ | ○ |
| movies | プロフィールで選択した好きな映画 | ○ | ○ | ‐ | ‐ | ‐ | ‐ |
| music | プロフィールで選択した好きな音楽 | ○ | ○ | ‐ | ‐ | ‐ | ‐ |
| mutualfriends | 友達の共通の友達一覧GETパラメータにuserを指定して確認する友達IDを指定。 | ○ | ‐ | ‐ | ‐ | ‐ | ‐ |
| notes | ノート一覧 | ○ | ○ | ‐ | ○ | ○ | ‐ |
| notifications | ユーザの通知一覧 | ○ | ‐ | ‐ | ‐ | ‐ | ‐ |
| outbox | メッセージの送信一覧(inboxと項目は一緒だが送信を行ったデータのみ取得可能) | ○ | ‐ | ‐ | ‐ | ‐ | ‐ |
| reviews | メッセージの送信一覧(inboxと項目は一緒だが送信を行ったデータのみ取得可能) | ‐ | ‐ | ‐ | ‐ | ‐ | ○ |
| payments | アプリ内の課金データ | ○ | ‐ | ‐ | ‐ | ‐ | ‐ |
| permissions | 当アプリ内のユーザの権限 | ○ | ‐ | ‐ | ‐ | ‐ | ‐ |
| photos | タグ付した写真一覧 | ○ | ○ | ‐ | ○ | ○ | ‐ |
| picture | ユーザのプロフィール画像 | ○ | ○ | ○ | ○ | ○ | ○ |
| pokes | ユーザのあいさつ一覧 | ○ | ‐ | ‐ | ‐ | ‐ | ‐ |
| posts | 自分から発信した投稿や友達になった時のデータ一覧 | ○ | ○ | ‐ | ○ | ○ | ○ |
| scores | 使用しているFacebookアプリ(ゲーム)の点数データ | ‐ | ‐ | ○ | |||
| staticresources | ユーザの投稿に対するいいね!やコメントの一覧 | ‐ | ‐ | ‐ | ‐ | ‐ | △管理者のみ |
| statuses | ユーザの投稿に対するいいね!やコメントの一覧 | ○ | ○ | ‐ | ○ | ○ | ○ |
| settings | 投稿設定情報(ユーザーによるウォール投稿許可、ユーザーによる写真の追加許可、投稿した写真へのタグ付け許可、ユーザーによる動画の追加を許可)の取得(ページのアクセストークンを使用する) | ‐ | ‐ | ‐ | △管理者のみ | ‐ | ‐ |
| subscriptions | ユーザの投稿に対するいいね!やコメントの一覧 | ‐ | ‐ | ‐ | ‐ | ‐ | △管理者のみ |
| tabs | タブの一覧情報(ページのアクセストークンを使用する) | ‐ | ‐ | ‐ | △管理者のみ | ‐ | ‐ |
| tagged | タグ付されたデータ一覧 | ○ | ‐ | ‐ | ○ | ○ | ○ |
| television | プロフィールで選択した好きなテレビ | ○ | ○ | ‐ | ‐ | ‐ | ‐ |
| updates | 更新したメッセージデータ | ○ | ‐ | ‐ | ‐ | ‐ | ‐ |
| videos | タグ付した動画一覧 | ○ | ○ | ‐ | ○ | ○ | ‐ |
・APIの戻り値(picture以外はJSON形式)
| 第1階層 | 第2階層 | 項目説明 |
|---|---|---|
| data | ||
| 配列 | ||
| name | アプリ・ページ名 | |
| access_token | アプリ・アクセストークン | |
| category | カテゴリ名 | |
| id | アプリID |
| 第1階層 | 第2階層 | 項目説明 |
| data | ||
| 配列 | ||
| name | アプリ・ページ名 | |
| category | カテゴリ名(デフォルトはInterrest?) | |
| id | アプリID |
| 第1階層 | 第2階層 | 項目説明 |
| data | ||
| 配列 | ||
| name | 管理ユーザ名 | |
| id | 管理ユーザID |
| 第1階層 | 第2階層 | 第3階層 | 項目説明 |
| data | |||
| 配列 | |||
| id | アルバムID | ||
| from | |||
| name | ユーザ名 | ||
| id | ユーザID | ||
| name | アルバム名 | ||
| link | アルバムのリンク先URL | ||
| cover_photo | 表紙画像 | ||
| count | 写真数 | ||
| type | 種別(mobile,profile,wall等) | ||
| created_time | 作成日 | ||
| updated_time | 更新日 |
| 第1階層 | 第2階層 | 項目説明 |
| data | ||
| 配列 | ||
| name | ブロックユーザ名 | |
| id | ブロックユーザID |
| 第1階層 | 第2階層 | 項目説明 |
| data | ||
| 配列 | ||
| name | 本の名前 | |
| category | カテゴリ | |
| id | 本のid | |
| created_time | 作成日 |
| 第1階層 | 第2階層 | 第3階層 | 第4階層 | 項目説明 |
| data | ||||
| 配列 | ||||
| id | チェックインID | |||
| from | ||||
| name | ユーザ名 | |||
| id | ユーザID | |||
| message | チェックイン時のコメント | |||
| place | ||||
| id | 場所ID | |||
| name | 場所名 | |||
| location | ||||
| street | 住所番地 | |||
| city | 住所市区町村 | |||
| country | 国名 | |||
| zip | 郵便番号 | |||
| latitude | 緯度 | |||
| longitude | 経度 | |||
| application | ||||
| name | チェックインアプリ名 | |||
| canvas_name | チェックインアプリの使用したページ名 | |||
| id | アプリID | |||
| created_time | 作成日 |
| 第1階層 | 第2階層 | 項目説明 |
| data | ||
| 配列 | ||
| name | イベント名 | |
| start_time | 開始時刻 | |
| end_time | 終了時刻 | |
| location | 場所名 | |
| id | イベントID | |
| rsvp_status | (Attending,Unsure,Declined,NotReplied) |
| 第1階層 | 第2階層 | 項目説明 |
| data | ||
| 配列 | ||
| name | ユーザ名 | |
| id | ユーザID | |
| relationship | 関係(wife,sister,cousin,unknown等) |
| 第1階層 | 第2階層 | 第3階層 | 項目説明 |
| data | |||
| 配列 | |||
| id | フィードID | ||
| from | |||
| name | 投稿ユーザ名 | ||
| id | 投稿ユーザID | ||
| message | 投稿内容 | ||
| story | ステータスの変更内容、友達になった場合の通知文字、いいね!ボタン押下時の通知文字等 | ||
| story_tags | |||
| 配列 | |||
| id | 関連タグID | ||
| name | 関連タグ名 | ||
| offset | story_tags内においてカテゴライズされたキーのような値がセットされる | ||
| length | 用途不明 | ||
| picture | 関連画像URL | ||
| link | 関連リンク先URL | ||
| name | フィード名 | ||
| caption | フィードの説明 | ||
| properties | ※フィードの内容がシェア当の場合に設定される。 | ||
| name | フィードのステータス(”By”といった文字列が設定される) | ||
| text | フィードの作成者名 | ||
| href | フィードのリンク先 | ||
| icon | フィードのアイコンURL(Twitter連動の場合はTwitterのアイコン。) | ||
| actions | |||
| 配列 | |||
| name | アクション名 | ||
| link | アクションを行うURL | ||
| privacy | |||
| description | 公開範囲ステータス(Public等) | ||
| value | 公開範囲(EVERYONE等) | ||
| allow | 許可数 | ||
| deny | ブロック数 | ||
| type | フィード種別 | ||
| object_id | 関連したオブジェクトID(イベントやアプリ等のID) | ||
| application | |||
| name | 関連アプリ名 | ||
| id | 関連アプリID | ||
| created_time | 作成日 | ||
| updated_time | 更新日 |
| 第1階層 | 第2階層 | 項目説明 |
| data | ||
| 配列 | ||
| id | 友達リストID | |
| name | 友達リスト名 |
| 第1階層 | 第2階層 | 第3階層 | 項目説明 |
| data | |||
| 配列 | |||
| from | |||
| name | 申請ユーザ名 | ||
| id | 申請ユーザID | ||
| created_time | 作成日 | ||
| unread | 未読(true) | ||
| to | |||
| name | 承認するユーザ名 | ||
| id | 承認するユーザID |
| 第1階層 | 第2階層 | 項目説明 |
| data | ||
| 配列 | ||
| id | 友達ユーザID | |
| name | 友達ユーザ名 |
| 第1階層 | 第2階層 | 項目説明 |
| data | ||
| 配列 | ||
| name | ゲームの名前 | |
| category | ゲームカテゴリ | |
| id | ゲームのid | |
| created_time | 作成日 |
| 第1階層 | 第2階層 | 項目説明 |
| data | ||
| 配列 | ||
| version | バージョン番号 | |
| name | グループ名 | |
| id | グループID | |
| administrator | 管理権限(True/False) | |
| bookmark_order | ソート順 |
| 第1階層 | 第2階層 | 第3階層 | 第4階層 | 第5階層 | 項目説明 |
| data | |||||
| 配列 | |||||
| id | メッセージID | ||||
| from | |||||
| name | 最初にメッセージを送信したユーザ名 | ||||
| id | 最初にメッセージを送信したユーザID | ||||
| to | |||||
| data | |||||
| 配列 | |||||
| name | 受信したユーザ名 | ||||
| id | 受信したユーザID | ||||
| subject | メッセージタイトル | ||||
| message | メッセージ内容 | ||||
| updated_time | 更新日 | ||||
| unread | 相手の通知未確認件数 | ||||
| unseen | 相手の未読件数 | ||||
| comments | |||||
| data | |||||
| 配列 | |||||
| id | メッセージID | ||||
| from | |||||
| name | メッセージ送信ユーザ名 | ||||
| id | メッセージ送信ユーザID | ||||
| message | メッセージ内容 | ||||
| created_time | 作成日 | ||||
| metadata | |||||
| connections | |||||
| comments | メッセージの送受信一覧 | ||||
| fields | |||||
| name | 項目名 | ||||
| description | 項目説明 |
| 第1階層 | 第2階層 | 第3階層 | 項目説明 |
| data | |||
| 配列 | |||
| id | idまたはURI | ||
| name | 統計情報の名称 | ||
| period | 集計区分(day等) | ||
| values | |||
| 配列 | |||
| value | 値 | ||
| end_time | 集計日 | ||
| description | 統計情報の説明 |
| 第1階層 | 第2階層 | 項目説明 |
| data | ||
| 配列 | ||
| name | 趣味・関心名 | |
| category | カテゴリ名 | |
| id | 趣味・関心ID | |
| created_time | 作成日 |
| 第1階層 | 第2階層 | 項目説明 |
| data | ||
| 配列 | ||
| name | いいね!したオブジェクトの名前 | |
| category | いいね!したオブジェクトのカテゴリ | |
| id | いいね!したオブジェクトのID | |
| created_time | 作成日 |
| 第1階層 | 第2階層 | 第3階層 | 項目説明 |
| data | |||
| 配列 | |||
| id | フィードID | ||
| from | |||
| name | 投稿ユーザ名 | ||
| id | 投稿ユーザID | ||
| message | 投稿内容 | ||
| picture | 関連画像URL | ||
| link | 関連リンク先URL | ||
| name | フィード名 | ||
| description | リンクの詳細説明 | ||
| icon | フィードのアイコンURL(Twitter連動の場合はTwitterのアイコン。) | ||
| created_time | 作成日 |
| 第1階層 | 第2階層 | 項目説明 |
| data | ||
| 配列 | ||
| name | 映画名 | |
| category | カテゴリ名 | |
| id | 映画ID | |
| created_time | 作成日 |
| 第1階層 | 第2階層 | 項目説明 |
| data | ||
| 配列 | ||
| name | 音楽名 | |
| category | カテゴリ名 | |
| id | 音楽ID | |
| created_time | 作成日 |
| 第1階層 | 第2階層 | 項目説明 |
| data | ||
| 配列 | ||
| name | 友達のユーザ名 | |
| id | 友達のユーザID |
| 第1階層 | 第2階層 | 第3階層 | 項目説明 |
| data | |||
| 配列 | |||
| id | ノートID | ||
| from | |||
| name | ノート作成ユーザ名 | ||
| id | ノート作成ユーザID | ||
| subject | ノートタイトル | ||
| message | ノート内容(画像を含む) | ||
| icon | ノートのアイコンURL | ||
| created_time | 作成日 | ||
| updated_time | 更新日 |
| 第1階層 | 第2階層 | 第3階層 | 項目説明 |
| data | |||
| 配列 | |||
| id | 通知ID | ||
| from | |||
| name | 通知を行ったユーザ名 | ||
| id | 通知を行ったユーザID | ||
| to | |||
| name | 通知を受けたユーザ名 | ||
| id | 通知を受けたユーザID | ||
| created_time | 作成日 | ||
| updated_time | 更新日 | ||
| title | 通知タイトル | ||
| message | 通知内容 | ||
| links | 関連URL | ||
| application | |||
| name | 関連アプリ名 | ||
| canvas_name | 関連アプリのページ名 | ||
| id | 関連アプリID | ||
| unread | 通知未確認件数 |
| 第1階層 | 第2階層 | 項目説明 |
| data | ||
| 配列 | ||
| installed | アプリインストール状況 | |
| status_update | ステータスの更新権限 | |
| publish_checkins | チェックインの更新権限 | |
| photo_upload | 写真のアップロード権限 | |
| video_upload | 動画のアップロード権限 | |
| sms | メッセージの権限 | |
| offline_access | ログインしてない状態のデータ使用権限 | |
| メールアドレスの取得権限 | ||
| create_event | イベント作成権限 | |
| create_note | ノート作成権限 | |
| share_item | オブジェクトの公開権限 | |
| bookmarked | ブックマーク | |
| rsvp_event | イベントの同行等の操作権限 | |
| read_stream | フィード等の取得権限 | |
| publish_stream | オブジェクトの更新権限 | |
| read_mailbox | メッセージの取得権限 | |
| ads_management | ||
| read_friendlists | 友達リストの取得権限 | |
| manage_friendlists | 友達リストの更新権限 | |
| xmpp_login | ||
| read_insights | ||
| read_requests | 友達承認待ちの取得権限 | |
| manage_notifications | ユーザの通知情報の取得権限 | |
| manage_pages | Fanページの管理権限 | |
| user_birthday | ユーザの誕生日の取得権限 | |
| user_religion_politics | ユーザの宗教情報の取得権限 | |
| user_relationships | ユーザと特定の友達の関係(妻やいとこ)の取得権限 | |
| user_relationship_details | ユーザと特定の友達の関係(妻やいとこ)の取得権限 | |
| user_hometown | ユーザの出身地情報の取得権限 | |
| user_location | ユーザの現住所の取得権限 | |
| user_likes | ユーザのいいね!情報の取得権限 | |
| user_activities | ユーザのアクティビティの取得権限 | |
| user_interests | ユーザの活動の取得権限 | |
| user_education_history | ユーザの学歴の取得権限 | |
| user_work_history | ユーザの職歴の取得権限 | |
| user_online_presence | ユーザのオンライン状況の取得権限 | |
| user_website | ユーザのWebSiteの取得権限 | |
| user_groups | ユーザのグループの取得権限 | |
| user_events | ユーザのイベントの取得権限 | |
| user_photos | ユーザの写真の取得権限 | |
| user_videos | ユーザの動画の取得権限 | |
| user_photo_video_tags | ユーザがタグ付した写真や動画の取得権限 | |
| user_notes | ユーザのノートの取得権限 | |
| user_checkins | ユーザのチェックイン状況の取得権限 | |
| user_about_me | ユーザの基本情報の取得権限 | |
| user_status | ユーザの直近の状況(更新したオブジェクト)の取得権限 | |
| friends_birthday | ユーザの友達の誕生日の取得権限 | |
| friends_religion_politics | ユーザの友達の宗教情報の取得権限 | |
| friends_relationships | ユーザと特定の友達の関係(妻やいとこ)の取得権限 | |
| friends_relationship_details | ユーザと特定の友達の関係(妻やいとこ)の取得権限 | |
| friends_hometown | ユーザの友達の出身地情報の取得権限 | |
| friends_location | ユーザの友達の現住所の取得権限 | |
| friends_likes | ユーザの友達のいいね!情報の取得権限 | |
| friends_activities | ユーザの友達のアクティビティの取得権限 | |
| friends_interests | ユーザの友達の活動の取得権限 | |
| friends_education_history | ユーザの友達の学歴の取得権限 | |
| friends_work_history | ユーザの友達の職歴の取得権限 | |
| friends_online_presence | ユーザの友達のオンライン状況の取得権限 | |
| friends_website | ユーザの友達のWebSiteの取得権限 | |
| friends_groups | ユーザの友達のグループの取得権限 | |
| friends_events | ユーザの友達のイベントの取得権限 | |
| friends_photos | ユーザの友達の写真の取得権限 | |
| friends_videos | ユーザの友達の動画の取得権限 | |
| friends_photo_video_tags | ユーザがタグ付した写真や動画の取得権限 | |
| friends_notes | ユーザの友達のノートの取得権限 | |
| friends_checkins | ユーザの友達のチェックイン状況の取得権限 | |
| friends_about_me | ユーザの友達の基本情報の取得権限 | |
| friends_status | ユーザの友達の直近の状況(更新したオブジェクト)の取得権限 |
| 第1階層 | 第2階層 | 第3階層 | 第4階層 | 項目説明 |
| data | ||||
| 配列 | ||||
| id | 写真ID | |||
| from | ||||
| name | 写真をアップしたユーザ名 | |||
| id | 写真をアップしたユーザID | |||
| tags | ||||
| data | ||||
| 配列 | ||||
| id | タグ付を行ったユーザID | |||
| name | タグ付を行ったユーザ名 | |||
| x | タグ付を行ったX座標 | |||
| y | タグ付を行ったY座標 | |||
| created_time | タグ付けを行った日 | |||
| picture | 写真ファイルのURL | |||
| source | アップロードした写真のURL | |||
| height | 写真の高さ | |||
| width | 写真の幅 | |||
| images | ||||
| 配列(4種類のサイズが用意される) | ||||
| height | 写真の高さ | |||
| width | 写真の幅 | |||
| source | 写真ファイルのURL | |||
| link | 写真の関連URL | |||
| icon | アイコン画像のURL | |||
| created_time | 写真の作成日 | |||
| position | 写真の表示位置 | |||
| updated_time | 写真の更新日 |
| 第1階層 | 第2階層 | 第3階層 | 項目説明 |
| data | |||
| 配列 | |||
| to | |||
| name | あいさつされたユーザ名 | ||
| id | あいさつされたユーザID | ||
| from | |||
| name | あいさつしたユーザ名 | ||
| id | あいさつしたユーザID | ||
| created_time | あいさつした日時 | ||
| type | poke |
| 第1階層 | 第2階層 | 第3階層 | 第4階層 | 項目説明 |
| data | ||||
| 配列 | ||||
| id | フィードID | |||
| from | ||||
| name | 投稿ユーザ名 | |||
| id | 投稿ユーザID | |||
| message | 投稿内容 | |||
| updated_time | 投稿のの更新日 | |||
| likes | ||||
| data | ||||
| 配列 | ||||
| id | いいね!したユーザID | |||
| name | いいね!したユーザ名 | |||
| comments | ||||
| data | ||||
| 配列 | ||||
| id | コメントしたユーザID | |||
| name | コメントしたユーザ名 |
| 第1階層 | 第2階層 | 項目説明 |
| data | ||
| 配列 | ||
| setting | 設定名 | |
| value | 可否(True/False) |
| 第1階層 | 第2階層 | 第3階層 | 項目説明 |
| data | |||
| 配列 | |||
| id | タブID | ||
| name | タブ名 | ||
| link | タブのリンク先URL | ||
| application | |||
| name | 関連アプリ名 | ||
| canvas_name | 関連アプリのページ名 | ||
| id | 関連アプリID | ||
| custom_name | カスタム名 指定がない場合は自動的にセットされる | ||
| is_permanent | タブの常時表示識別フラグ(True:False) | ||
| positions | タブのソート順 | ||
| is_non_connection_landing_tab | いいね!をしていないユーザに対する表示有無(True:False) |
| 第1階層 | 第2階層 | 項目説明 |
| data | ||
| 配列 | ||
| name | テレビ番組の名前 | |
| category | テレビ番組カテゴリ | |
| id | テレビ番組のid | |
| created_time | 作成日 |
| 第1階層 | 第2階層 | 第3階層 | 項目説明 |
| data | |||
| 配列 | |||
| id | 動画ID | ||
| from | |||
| name | 動画をアップしたユーザ名 | ||
| id | 動画をアップしたユーザID | ||
| name | 動画のタイトル | ||
| description | 動画の説明 | ||
| picture | 写真の関連URL | ||
| embed_html | 動画の埋め込みHTML文字列 | ||
| icon | アイコン画像のURL | ||
| source | アップロードした動画のURL | ||
| created_time | 動画の作成日 | ||
| updated_time | 動画の更新日 |
FaceBookの機能およびAPIは逐次追加されるので、当記事も合わせて更新していきます。
TwitterのAPIをForce.com上で使用するため、Oauth認証を用いたAPEXのライブラリを探してみましたが
これといったライブラリが見つからなかったため、自前で作成しました。
Webアプリにおいて、Oauth認証を用いて、TwitterAPIを利用するには以下の手順が必要となります。
①Twitterにログインして、アプリ情報を登録する。
②登録したアプリの情報を使用し、Twitterに通信してRequest tokenを取得する。
③Request tokenを使用して、Twitter認証画面にリダイレクトする。
④Twitter認証画面から戻ってきた際に付加されたGETパラメータを使用してAccesstokenを取得する。
⑤Access tokenを使用して、各TwitterのAPIをコールする。
上記を踏まえて、下記に自分のタイムラインを表示する説明および例を記載します。
①Twitterにログインして、アプリ情報を登録します。
※こちらは参考サイトが多数ありますので説明は割愛します。
②アプリ登録画面に表示されたConsumer key、Consumer secret、Request token URLを使用してRequest tokenを取得します。Request token URLに対して、下記GETパラメータを付加して通信を行います。
| パラメータ名 | 値 |
|---|---|
| oauth_callback | Twitterの認証画面からコールバックされる任意のURLをエンコードした文字列(アプリ登録時にも設定しますが、こちらが優先されます) |
| oauth_consumer_key | アプリ登録画面に表示された文字列 |
| oauth_nonce | ハッシュを用いたその場限りの文字列(例では乱数とアクセス日時を利用して、MD5に変換しています) |
| oauth_signature_method | HMAC-SHA1′固定 |
| oauth_timestamp | 現在時刻(UNIXタイムスタンプ形式) |
| oauth_version | 1.0′固定 |
| oauth_signature | 送信するURLから当パラメータを除いた文字列を、HMAC-SHA1形式に変換したハッシュ値 |
Encodingutil.urlEncode('任意のURL','UTF8')
//1~9の値を使用して乱数を作成する
String CharList = '123456789';
String Res = '';
integer position;
//8桁の乱数を作成
for(Integer i = 0; i < 8; i++) {
position = Integer.valueof(String.valueof(Math.roundToLong(CharList.length()*Math.random()))) -1;
if(position==-1)position=0;
Res += CharList.substring(position,position+1);
}
//現在のミリ秒を戻す
DateTime d = System.now();
String now_mm_second = String.valueOf(d.year() + d.month() + d.day() + d.hour() + d.minute() + d.second() + d.millisecond());
//乱数と現在日時を繋げた値からMD5に変換し、この値をセットする
EncodingUtil.convertToHex(Crypto.generateDigest('MD5', Blob.valueOf(now_mm_second + Res))) ;
String.valueOf(Datetime.now().getTime()).substring(0, 10);
//送信方式、送信URL、送信パラメータを&区切りでセットし、URLエンコードを行う
//注意点としてはoauth_callbackのURLは2回URLエンコードを行うイメージ
String sSignatureSource = 'GET&
https%3A%2F%2Fapi.twitter.com%2Foauth%2Frequest_token&
oauth_callback%3D【任意のURLを2回エンコードした文字列】%26
oauth_consumer_key%3D【アプリ登録画面に表示されたConsum key】%26
oauth_nonce%3D【上記方法で作成した文字列】%26
oauth_signature_method%3DHMAC-SHA1%26
oauth_timestamp%3D【上記方法で取得した文字列】%26
oauth_version%3D1.0';
//アプリ登録画面で表示されたConsumer secretを利用してHMAC-SHA1ハッシュ変換で使用するキーを作成
String sHashKey = 【アプリ登録画面に表示されたConsumer secret】+'&';
//上記で作成した2つの文字列を使用して、oauth_signatureの値を作成
Blob blbSignature = Crypto.generateMac('HMacSHA1', Blob.valueOf(sSignatureSource),Blob.valueOf(sHashKey));
EncodingUtil.urlEncode(EncodingUtil.base64Encode(blbSignature), 'UTF-8');
<Twitterからの戻り値(テキスト形式)>
oauth_token=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&
oauth_token_secret=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&
oauth_callback_confirmed=true
//カスタムオブジェクトに登録
TwitterRequestToken__c oTwiOa_ins = new TwitterRequestToken__c();
oTwiOa_ins.token__c = oauth_token;
oTwiOa_ins.token_secret__c = oauth_token_secret;
insert oTwiOa_ins;
//ログイン画面にリダイレクト
PageReference pTwitterLogin = new PageReference('https://twitter.com/oauth/authenticate?oauth_token='+oauth_token);
return pTwitterLogin.setRedirect(true);
※アプリ登録画面のAuthorize URLではhttps://api.twitter.com/oauth/authorizeが表示されますが、上記のURL(/authenticate)を使用することで、既にTwtterにログイン済みでアプリの許可を行っている場合は認証画面が表示されず、コールバックに指定したURLに直接リダイレクトされます。
④コールバックされた際のGETパラメータであるoauth_token、oauth_verifierを使用してAccess tokenを取得します。アプリ登録画面に表示されたAccess token URLに対して、下記GETパラメータを付加して通信を行います。またoauth_token_secretも使用するので、先ほど登録したカスタムオブジェクトより、GETパラメータのoauth_tokenを条件に抽出します。
| パラメータ名 | 値 |
|---|---|
| oauth_consumer_key | アプリ登録画面に表示された文字列 |
| oauth_nonce | ハッシュを用いたその場限りの文字列(例では乱数とアクセス日時を利用して、MD5に変換しています) |
| oauth_signature_method | HMAC-SHA1′固定 |
| oauth_timestamp | 現在時刻(UNIXタイムスタンプ形式) |
| oauth_version | 1.0′固定 |
| oauth_token | コールバックされた際のGETパラメータ |
| oauth_verifier | コールバックされた際のGETパラメータ |
| oauth_signature | 送信するURLから当パラメータを除いた文字列を、HMAC-SHA1形式に変換したハッシュ値 |
//Request token取得で作成した方法と基本的には同じ
//異なる点としてHMAC-SHA1ハッシュ変換で使用するキーにoauth_token_secretも使用
String sSignatureSource = 'GET&
https%3A%2F%2Fapi.twitter.com%2Foauth%2Faccess_token&
oauth_consumer_key%3D【アプリ登録画面に表示されたConsum key】%26
oauth_nonce%3D【コールバック後、再作成するnonce文字列】%26
oauth_signature_method%3DHMAC-SHA1%26
oauth_timestamp%3D【コールバック後、再取得するtimestamp文字列】%26
oauth_token%3D【コールバックされた際のGETパラメータ】%26
oauth_verifier%3D【コールバックされた際のGETパラメータ】%26
oauth_version%3D1.0';
//アプリ登録画面で表示されたConsumer secretおよびReqest tokenを利用してHMAC-SHA1ハッシュ変換で使用するキーを作成
String sHashKey = 【アプリ登録画面に表示されたConsumer secret】+'&'+【カスタムオブジェクトより取得したoauth_token_secret】;
//上記で作成した2つの文字列を使用して、oauth_signatureの値を作成
Blob blbSignature = Crypto.generateMac('HMacSHA1', Blob.valueOf(sSignatureSource),Blob.valueOf(sHashKey));
EncodingUtil.urlEncode(EncodingUtil.base64Encode(blbSignature), 'UTF-8');
<Twitterからの戻り値(テキスト形式)>
oauth_token=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&
oauth_token_secret=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&
user_id=XXXXXXXXX&
screen_name=ログインしたユーザ名
⑤Access tokenを使用して、ログインユーザのタイムライン情報を取得します。
※各APIのアクセスURLについては他サイトに多数ありますので、そちらを参照してください。
ユーザのタイムラインを取得するURL:http://api.twitter.com/1/statuses/home_timeline.xml
| パラメータ名 | 値 |
|---|---|
| oauth_consumer_key | アプリ登録画面に表示された文字列 |
| oauth_nonce | ハッシュを用いたその場限りの文字列(例では乱数とアクセス日時を利用して、MD5に変換しています) |
| oauth_signature_method | HMAC-SHA1′固定 |
| oauth_timestamp | 現在時刻(UNIXタイムスタンプ形式) |
| oauth_token | ④で取得したAccess token |
| oauth_version | 1.0′固定 |
| oauth_signature | 送信するURLから当パラメータを除いた文字列を、HMAC-SHA1形式に変換したハッシュ値 |
//Access token取得で作成した方法と基本的には同じ
//異なる点としてはHMAC-SHA1ハッシュ変換で使用するキーにRequest tokenのoauth_token_secretから
//Access tokenのoauth_token_secretに変更
String sSignatureSource = 'GET&
http%3A%2F%2Fapi.twitter.com%2F1%2Fstatuses%2Fhome_timeline.xml&
oauth_consumer_key%3D【アプリ登録画面に表示されたConsum key】%26
oauth_nonce%3D【リクエスト時に再作成するnonce文字列】%26
oauth_signature_method%3DHMAC-SHA1%26
oauth_timestamp%3D【リクエスト時に再取得するtimestamp文字列】%26
oauth_token%3D【Access token】%26
oauth_version%3D1.0%26
source_screen_name%3D【ユーザ名】';
//アプリ登録画面で表示されたConsumer secretおよびAccess tokenを利用してHMAC-SHA1ハッシュ変換で使用するキーを作成
String sHashKey = 【アプリ登録画面に表示されたConsumer secret】+'&'+【Access tokenのoauth_token_secret】;
//上記で作成した2つの文字列を使用して、oauth_signatureの値を作成
Blob blbSignature = Crypto.generateMac('HMacSHA1', Blob.valueOf(sSignatureSource),Blob.valueOf(sHashKey));
EncodingUtil.urlEncode(EncodingUtil.base64Encode(blbSignature), 'UTF-8');
<Twitterからの戻り値(テキスト形式)>
タイムラインのXML文字列
ここまでが一連の流れとなります。AccessTokenについてはユーザ・アプリ単位で一意となり
無期限で使用できるため、予め使用ユーザが分かっていれば上記④までの初回のみでOKです。
※RequestTokenについては1度しか使用できないようです。
また上記のサンプルソースをこちらで公開しています。

先日フィリピンにて短期英語留学をしてきました。1週間と短い期間でしたが非常に有意義な時間を過ごすことができました。
昨今スカイプ経由のフィリピン人との英会話が話題になっていますが、実際に現地で学ぶタイプの学校もいくつかあります。 私は検索で見つけたCNE1 という学校に滞在しました。この体験記が同様の検討をされている皆様の参考になれば幸いです。
また、学校はマニラから車で3時間ほど走る片田舎にあります。もちろんバス等で移動はできるのですが、現地はある種の隔離空間になっています。それ故の高揚感や連帯感が学習環境として非常に有用に機能しているように感じました。
空調も整備されており暑さも余り気にならず、むしろ日差しの下で外で仕事するのも新鮮で心地よかったです。また、現在新校舎を建設中で年内には完成しそうでした。個室や電源や空調が整備されてより仕事のしやすい環境になりそうです。
電話については、日本のを持って行ってローミングで通話もできますし、ほとんどの時間を校内で過ごすので無線LAN経由のSkypeでも十分です。また多くの方は現地のプリペイド携帯を使っていました。
多くの日本企業が英語を重視する中で、『TOEIC』で一定スコアをとるまでフィリピン英語学校に缶詰、というネット企業も出てきていると聞きました。地理的、経済的なメリットを活かし仕事も十分に両立可能なフィリピン英会話は今後も更に発展するのではないかと思います。
※ガジェット通信さんに寄稿させて頂きました。
7月に注文していたChromebookがやっと届きました。購入してきてくれたまめこさんありがとう!
9月に日本でも販売開始するらしいですが、これは米国で販売されているサムスンのWifiモデルです。これは米Amazon経由だったようですが、日本では企業向け月額プランが開始するようなのでどんな流通で販売されるのでしょうかね。期待です。
まだまだ募集してます、クラウドシステム開発プログラマ。特に以下の経験者大歓迎です。
詳細はこちら:
http://uhuru.co.jp/recruit/index.html#cs_engineer
今年度で社員数は倍増し現在約40名となりました。秋にはオフィス拡張のために引っ越しを行います。
クラウドに興味のある方、今までとはひと味違った業務システム開発をしてみたい方、Web技術の新しい可能性を追求してみたい方、ご応募お待ちしてます!