C#でFacebookのフレンドリストを取得するサンプルについて

C#Facebookのフレンドリストを取得するサンプルについて
こんにちわ。エンジニアのR.Nです。


今回のテクヤンは、MicrosoftFacebook Developer ToolkitのC#でのサンプルコードを利用しまして、
Webサイト上で、Facebookのフレンドリストを取得するサンプルを動作させる方法をご紹介させて頂きます。
Facebookからのフレンドリスト取得ロジックの説明については、省略させて頂きます。

1.STEP1 ツールキットをダウンロード

Facebook Developer Toolkit
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=CCD46762-45EC-4FBE-AD91-FC916671E734&displaylang=en

まず、上記URLのDownLoadボタンより、Toolkitをダウンロードします。

2.STEP2 プログラムを確認

Facebook.sln
デフォルトでインストールすると、

C:\Program Files\Coding4Fun\Facebook\Source\csharp\Facebook.sln

にソリューションファイルができます。
Visual Studio2010で起動する必要があります。

・参照設定
 Facebook.dll
 Facebook.Controls.dll
 Facebook.WebControls.dll

 ※上記DLLの参照を正しく設定しますと、正常にビルドが実行できます。

APIキー設定
 C:\Program Files\Coding4Fun\Facebook\Source\csharp\FacebookWebSample\Default.aspx.cs

using System;
using System.Collections.ObjectModel;
using System.Web.UI;
using Facebook.WebControls;
using Facebook;

public partial class _Default : Page 
{
    Facebook.Components.FacebookService _fbService = new Facebook.Components.FacebookService();

    private const string FACEBOOK_API_KEY = "※1 アプリケーションID";
    private const string FACEBOOK_SECRET = "※2 Application Secret";

    protected void Page_Load(object sender, EventArgs e)
    {

以下省略

※1 アプリケーションID
※2 Application Secret

を設定する必要があります。キーの取得方法は、「3.FacebookにApp登録」で説明します。

3.STEP3 FacebookにApp登録

http://www.facebook.com/developers/apps.phpへアクセスし、App登録を行います。

図1 追加ボタンをクリック

図2 該当項目を入力

図3 サイトURLを設定

4.STEP4 プログラム実行、サイト設置

※1 アプリケーションID
※2 Application Secret

をプログラム上から設定し、
Facebook.slnをビルドし、対象サーバに設置します。
これで、作業完了です。

4.STEP5 動作確認

http://tech.mindfree.co.jp/

上記サイトより、確認できました。
こんなに簡単動作すると、感動しますね。


※本URLはマインドフリー株式会社のテスト用サイトですので、
無断停止、削除する可能性がありますので、ご了承願います。

IIS7.0、7.5でネットワークドライブ上のWebアプリケーションを実行する方法

目的

ネットワークドライブ上にアプリケーションを設置することで
共有して使用することが可能になり、修正後の再配布の手間も省くことができます。

ネットワークドライブ上のWebアプリケーションをドキュメントルートとして設定

設定について

下記条件を想定します。
サイト名:site1
ドメイン:site1.jp
ドキュメントルートのネットワークドライブパス:\\fileserver\wwwroot\site1
アップロードファイル保存先:\\fileserver\data\site1
アカウント:testsite
パスワード:testsitepass

1.サイトの追加

    • 「インターネット インフォメーション サービス(IIS)マネージャー」を起動
    • 「サイト」⇒「Webサイトの追加」

2.追加するWebサイトの設定を入力

    • サイト名:site1
    • 物理パス:\\appserver\wwwroot\site1
    • ホスト名:site1.jp

このままでは物理パスへの接続権限が設定されていないため、「接続」をクリック、特定のユーザーを選択、「設定」をクリックしてパスへの接続情報を入力します。

    • ユーザー名:testsite
    • パスワード:testsitepass

3.アプリケーションプールの実行権限の変更

ファイルアップロードの操作などがあり、アプリケーションサーバ以外へファイルの保存が発生する場合は
アプリケーションプールから保存できるように保存を行うパスへの接続権限の設定が必要となります。

    • 「アプリケーション プール」⇒"追加したWebサイトの設定されているアプリケーションプール名"⇒「詳細設定」
      ※IIS7.0/IIS7.5の場合はデフォルトで入力されたサイト名となります。

プロセスモデル-ID]を"ビルドイン アカウント"から"カスタム アカウント"へ変更し接続情報を入力します。

    • ユーザー名:testsite
    • パスワード:testsitepass

mixi、Facebookはサイトではなく、インフラ。

こんにちは。

東京IT新聞に、この記事のタイトルにもした内容の記事があったので、それについて書きたいと思います。

東京IT新聞 2011年1月25日号 P3 「mixiFacebookはサイトではない、インフラなのだ」

ブログもあります。*1


勝手に抜粋、要約すると、

                                                                                • -

mixiFacebookはサイトではなく、「リアル」な人間関係データ、つまり「リアルソーシャルグラフ」を提供するインフラである。
その証拠にmixiは、次々とAPIを公開しこれから半年以内にmixiは「丸裸」状態になる。
そんなことをすれば、mixiに誰もアクセスしなくなり、広告のクリック率も低下する可能性もあるが、
mixi自体がリアルソーシャルグラフを提供するインフラ事業者だと自分たちを定義しているからこそ、APIを次々と公開している。
インフラとしての収益の上げ方があると考えるからこそ、ページビューにはこだわらない。


問題は、リアルソーシャルグラフを自社で持つべきか、他社のインフラを利用するかだが、
ポータルや、ECサイトは、リアルソーシャルグラフのインフラ事業者になれない。
APIを公開してページビューを下げるわけにはいかないからだ。


今までのITの流れから見ると、
今、mixiFacebookソーシャルグラフのシェア争いを始めたということは、実は主戦場は次のレイヤーに移行したということを意味している。


mixiFacebook以外のあらゆるサイトがすべきことは、退屈なシェア争いは両社に任せ、早く次のレイヤーに乗り移り自分の得意領域で牙城を築くべきだ。

                                                                                • -

ということを書かれています。

なぜmixiFacebookがインフラと呼ばれるか・・・

あるサイトが、Facebookが提供しているAPIを利用しているとします。
もし、Facebookのシステムが停止すると、そのAPIを利用しているそのサイトも停止してしまいます。
サーバーが停止したら、サイトも停止するというインフラの動きに酷似しているからです。


MFファンパックサービス

ちなみにマインドフリーでも、MFファンパックサービスを提供しています。
ユーザー数5億人超のインフラは最強なんです。
http://www.facebook.com/fanpac
MFファンパックでは、アカウント取得代行や企画・要件定義・運用設計といったファンページ構築、カスタムタブやアプリの追加、効果検証などの運用支援、キャンペーンに応じたアプリ制作などを行っています。
是非見てくださいね!

MySQLストアドプロシージャを利用したIF文の書き方について

こんにちは、エンジニアのR.Nです。

今回のテクヤンは、MySQLストアドプロシージャを利用したIF文の書き方についてご紹介致します。
ある引数から条件分岐を行い、MySQL側で結果を操作することが可能です。

【条件】
 ・flg = 0 の場合、tableAよりidを条件とし抽出し結果のテーブル構造を返却する
 ・flg = 1 の場合、tableBよりidを条件とし抽出し結果のテーブル構造を返却する

【入力】
 ・IDとフラグ

【出力】
 ・テーブル構造を返却

上記条件の場合、サンプルコードを以下に記載致します。

1.IF文を使用したストアドプロシージャ

【サンプル】
-- -----------------------------------
-- CREATE PROCEDURE SelectFunction
-- -----------------------------------
CREATE PROCEDURE SelectFunction(IN id INT, IN flg INT) 
BEGIN

IF flg = 0 THEN
	SELECT 	*
	FROM 	tableA
	WHERE 	tableA.ID = id
	;
ELSE
	SELECT 	*
	FROM 	tableB
	WHERE 	tableB.ID = id
	;
END IF
;

END

※ある特定のIDから、別テーブルを操作し、
 その結果をそれぞれ返却したい場合にとても便利です。

中国最大のECサイト「タオバオ」のデータベース設計について

 皆さん、明けましておめでとうございます。
 chujiangleiです。今年も宜しくお願い致します。

 昨年のことを振り返ると、2010年は「NoSQL」という言葉をネット上で注目されました。
 データベースの主流はリレーショナルデータベース(RDB)ですが、GoogleAmazonRDBでないDBを使って成功してから、
 RDB以外のDBが注目されるようになりました。「RDB以外のDB」を指す「NoSQL」という言葉が使われ始めました。
 簡単に言えばNoSQLとは、SQL言語を利用しない非リレーショナルデータベース(RDB)を総称した表現です。
 代表的なものとして、数値や文字列といったデータ(value)を1個のキー(key)にひも付けて管理する「key-valueストア」があります。
 NoSQL は、膨大データを高速に処理できるメリットがあるため、FaceBook, Twitterも採用しました。

 2010年6月に日本ヤフーと中国最大のECサイトタオバオ」が、取り扱い商品を相互取引できるサービスをスタートすると発表しました。
 タオバオはC2CとB2CのECサイトを運営し、総取り扱い点数は4億点、ユーザー数は2億人、年間流通総額は約3兆円に上ります。
 Yahoo!ショッピングと合わせると、取り扱い点数は4億5000万点、ユーザー数は2億6000万人、
 流通総額は3兆8000万円と「eBay」を超えて世界最大のECサイトになります。

 このタオバオはNoSQLをカスタマイズする自社用DB「Tair」を開発し、2010年6月30日にオープンソースとして公開されました。
 今回では、「Tair」の構造を説明させて頂きます。

Tairの機能

 C言語に基づき開発したTairはLinux, GPLv2に対応します。
 Tairでは、Key/Valueストアが提供した機能(Get, Put, Delete)以外で、下記の機能を追加しました。

非同期処理

  同時更新のデータを自動マージする機能です。下記の例を通して説明させて頂きます。
  AユーザとBユーザが同時に「"A,B,C"」をゲットしました。
  Aユーザが"D"を追加してデータは「"A,B,C,D"」になりました。
  しかし、Bユーザが"E"を追加してデータは「"A,B,C,E"」になってしまいました。
  非同期処理がないなら、最終の更新結果は「A,B,C,D」、「A,B,C,E」のどちらかになります。
  そうすると、1ユーザの更新データがなくなります。
  Tairでは、ユーザの更新内容を上書きされないようにAユーザとBユーザの更新内容を自動マージして
  更新結果を「"A,B,C,D,E"」にしてくれます。

分散機能

  Tairでは、負荷を軽減するため、サーバに分散処理用のカウンターを設置し、分散ハッシュ表を用いて、
  データを複数のサーバーに、冗長性を持たせながら配置します。これにより、サーバーを追加するだけで
  システムを容易にスケールアップさせることができ、障害への耐性も強くなります。

Item機能

  Tairでは、FIFOに基づいて値を配列として利用することもサポートされます。
  例えば、キーの値が[1,2,3,4,5]なら、下記の3つ操作が提供しております。

  1. 値の一部[1,2]を返すこと
  2. [1,2,3,4,5]を丸ごとで削除すること
  3. 値の一部を削除し、削除されたデータを返すこと

Tairの構造

 Tairでは、Client, ConfigServerとDataServer3つの部分から構成されます。
 DataServerとConfigServer間のHeartBeatにより、データを平均分布してDB負荷を分散できます。
 Clientでは、初期化するときはConfigServerからデータ分布の情報を取得し、最短時間でリクエストを応答します。
 DataServerでは、指令によりデータの保存、移動などの処理を実行されます。



DataServerの構造





ダウンロード先

 下記のサイトでタオバオに関する多くの技術を公開されております。興味ある方にお役に立てれば幸いです。
 http://code.taobao.org/

まとめ

 NoSQLのデメリットはトランザクションがないことです。タオバオは非同期処理を追加し、高可用性のNoSQLを開発しました。
 今回では、タオバオ社の開発者のブログを参考して、Tairの拡張機能や仕組みを説明させて頂きました。
 コア部分の説明や具体的な動きにつきまして、情報不足で説明できなくて申し訳ありません。
 今後も調査し続けたいと思います。

参考サイト

 http://www.oschina.net/p/tair

C#のコレクションまとめ

C#でリストや配列などコレクションの処理をするのは何かと多いです。
C#のバージョンが、1.0から2.0, 3.0, 4.0と上がっていくたびに、
コレクションのライブラリもより便利で使いやすいクラスが増えてきました。

クラスが非常に多く、どこに何があるのか分かりにくかったのでまとめてました。

コレクション継承図

C#のコレクションとして、上の図のようなクラス(やインターフェイス)があります。

System.Collections名前空間

System.Collections名前空間以下のクラスは、C#1.0に作られたコレクションライブラリです。
基本的にこれらのクラスは、古く扱いづらいので使わないほうが良いと思います。
次に説明するSystem.Collections.Generic名前空間を使用してください。
ただし、昔のライブラリによっては、このSystem.Colelctionを使用している場合があるので、覚えておいて損はないと思います。

System.Collections.Generic名前空間

System.Collections.Generic名前空間以下のクラスは、C#2.0に作られたコレクションライブラリです。
C#でコレクションを扱う場合、基本この名前空間をusingします。

System.Collections.Generic以下のクラス

IEnumerable<T>インターフェイス

ここからはSystem.Collections.Generic名前空間以下のクラスについて説明します。
C#のコレクション、リストや配列などはすべて、IEnumerableインターフェイスを継承しています。
なので、リストであろうが配列であろうが、IEnumerable型として使用することが出来ます。

IEnumerable<int> xs = new List<int>{1,2,3,4};
IEnumerable<int> ys = new int[]{1,2,3,4};
IEnumerable<int> zs = new HashSet<int>{1,2,3,4};
IList<T>インターフェイス

リストです。可変長な配列として扱うことができ、追加や削除が可能です。

IList<int> xs = new List<int>{0,1,2,3};
xs.Add(4);
xs.Add(5);

上の例ではxsの中身は{0,1,2,3,4,5}になります。

ISet<T>インターフェイス

C#4.0から追加されたインターフェイスです。
要素がひとつだけのコレクションです。同じ要素は二個以上入りません。

ISet<int> xs = new HashSet<int>{1,2,3,4};
xs.Add(5);//追加
xs.Add(4);//同じ要素がある場合追加されない

上の例では、xsの中身は{1,2,3,4,5}になります。

IDictionary<TKey,TValue>インターフェイス

TKeyがキー、TValueが値な辞書コレクションです。

IDictionary<String,String> map = new Dictionary<String,String>();
map["google"] = @"http://www.google.com/";
map["yahoo"] = @"http://www.yahoo.co.jp/";
map["hatena"] = @"http://www.hatena.ne.jp/"
map["mindfree"] = @"http://mindfree.jp/";
String str = map["hatena"];
Console.WriteLine(str);// "http://www.hatena.ne.jp/"

ジェネリック

IListに付いているTというものが付いていますが、これは型パラメータと言われるのもです。
IListのTは要素の型を表しています。
例えばIListならば要素がのintリストですし、IListでは要素がStringのリストになります。
Tなど、型パラメータをもつのもをジェネリックスと呼びます。

System.Linq.Enumerableクラス

C#3.5からSystem.Linq.EnumerableクラスというIEnumerableに対して便利な拡張メソッドを提供しているクラスが追加されました。
使用する場合はSystem.Linq名前空間をusingします。
Enumerableクラスを使用すればSelect()やWhere()などを利用することが出来ます。


他にも、図に載せきれていない便利なクラスがたくさんあるので、System.Collections.Generic名前空間を参考にしてください。

ネットワークドライブ上のアプリケーションを実行する方法

目的

ネットワークドライブ上にアプリケーションを設置することで
共有して使用することが可能になり、修正後の再配布の手間も省くことができます。

ネットワークドライブ上のアプリケーションの実行を許可

 WindowsServer2008 の初期設定状態だと
ネットワーク越しの実行が許可されていないため下記のコマンドで
実行したいファイルについて明示的に信頼レベル[FluuTrust]を宣言する。

 caspol -machine -addgroup 1. -url [フォルダもしくはファイル※1] FullTrust *1

 例)サーバ名:[DATA1]
   共有名:[WebApp]
   をドキュメントルートとして設置されているアプリケーションについて実行権限を設定する場合は
   
 caspol -machine -addgroup 1. -url "file://\\DATA1\WebApp\*" FullTrust

 となる。

   

*1:caspol.exe[コード アクセス セキュリティ ポリシー ツールの略]
このコマンドはWEBアプリケーションのみに限らず、
EXEファイルについてもセキュリティ設定が可能
Webアプリケーションの場合は、フォルダ指定となる。