0

facebook c# sdk に戻ると、常にあちこちでいくつかの変更が見つかります。アクセストークンに適切にアクセスすることについてGOt、今私はユーザーの友達の数を数えたいと思っています。

これが私の既存のコードです。

string accessToken = ViewState["accessToken"].ToString();
Facebook.FacebookClient fb = new FacebookClient(accessToken);
var me = fb.Get("/me/friends");

これで、「データ」と「ページング」の 2 つのキーを持つ json 形式のフレンド リストが表示されます。

すべての友達と少なくとも友達の数を取得するにはどうすればよいですか?

入力していただきありがとうございます

4

2 に答える 2

2

私は FB のGraph API Explorerを使用しましたが、このクエリに追加できる追加の URL パラメータがあります。つまり、"limit=number" と "offset=number" です。それらを指定しないと、FB は最大許容数の友達 ( 5000 ) を返すようです。「ページング」キーは引き続き表示されますが、リンクをたどると、2 ページ目に友達が表示されません。

できるよ:

var me = fb.Get("/me/friends?limit=5000&offset=0");

デフォルトの制限が将来的に小さな値に変更されないようにするためです。

したがって、あなたの質問に対する答えは次のとおりです。
上記のクエリを使用し、ページングを気にせず、FB から返された JSON を解析し、「データ」配列内のオブジェクトの数を数えます。より防御的には、 にリクエストを送信し、paging.nextその URL に従って、次のページに追加の友達がいるかどうかを確認することもできます (5000 の制限があるため、これは発生しないはずです)。

于 2012-10-28T11:20:37.173 に答える
2

ありがたいことに、自分で回避しました..ここに方法があります。うまくいけば、誰かがこのリンクから得た多くのヘッドバンギングを救うでしょう

Facebook 動的オブジェクト

ここに私のコードがあり、いいね/コメントなどにも適していると思います.

 dynamic friends = fb.Get("/me/friends?limit=5000&offset=0");

            Dictionary<string, string> resultList = new Dictionary<string, string>();



            foreach (var item in friends.data)
            {
                var newdata=item;
                string item1 = newdata[0].ToString();
                string item2 = newdata[1].ToString();

                if (resultList.ContainsKey(item1))
                {
                    item1 = item1 + "duplicate";  
                }

                resultList.Add(item1,item2);
            }

一部のオタクには同じ名前のプロファイルがあるため、containsKey は例外のスローを回避するためのものです。

ここでの最後のことは、実際の友達リストの数よりも少ない数が返されることです。理由はわかりません.. :(

于 2012-10-28T11:46:49.407 に答える