2012-01-12 23 views
8

Tôi đang xây dựng một ứng dụng Facebook và tôi muốn nó có thể đọc tất cả các trạng thái của người dùng trong năm qua. Khi tôi thực hiện cuộc gọi API, tôi chỉ có thể truy xuất 100 trạng thái đầu tiên bất kể tôi đặt giới hạn thành gì.Làm cách nào để gọi hơn 100 trạng thái bằng API Facebook?

Đây là URL Tôi đang sử dụng để thực hiện cuộc gọi: https://graph.facebook.com/me/statuses?limit=100&access_token= ...

Khi tôi đặt giới hạn dưới, nó cho thấy trạng thái ít (chứng minh rằng đối số giới hạn hoạt động). Khi tôi đặt giới hạn cao hơn, nó chỉ mang lại cho tôi 100 điểm đầu tiên. Khi tôi sử dụng 'từ', nó vẫn chỉ mang lại cho tôi 100.

Khi tôi sử dụng url 'tiếp theo' nó mang lại cho tôi, tôi không thấy dữ liệu trong quá khứ 100 trạng thái đầu tiên.

Tôi biết nó có thể để có được nhiều hơn thế bởi vì các ứng dụng như My Year In Status

Trả lời

4

tôi đã xác minh bằng cách sử dụng API explorer Graph rằng pagination không hoạt động như bạn đã mô tả. Đăng nhập dưới dạng lỗi với Facebook tại: https://developers.facebook.com/bugs và đăng lỗi # tại đây.

EDIT

mỗi việc đóng cửa lỗi, giới hạn 100 là By Design và bạn sẽ không nhận được nhiều hơn thế, có nghĩa là Facebook đã đưa ra quyết định kinh doanh ý thức để giới hạn số tiền dữ liệu phải có lưu trữ, xử lý và phân phối từ API đồ thị. Nó tốn tiền để làm như vậy và vì API miễn phí, tôi không thể tranh luận với họ. Tuy nhiên, nếu tôi đã trả tiền cho nó, sau đó địa ngục có tôi đá và hét lên tất cả các con đường xuống đường.

+0

https://developers.facebook.com/bugs/155458081230560 –

+0

pháp này có trả lời câu hỏi của bạn? – DMCS

+0

Ray từ Facebook cho biết rằng bạn chỉ có thể thấy 100 trạng thái _at once_ theo thiết kế, nhưng bạn có thể sử dụng phân trang để xem thêm. Tuy nhiên, việc phân trang không hoạt động, vì vậy câu trả lời của anh ta không giữ được. Dù sao, nó được gán lại để họ làm việc trên đó. Anh ta không bao giờ nói nó theo thiết kế mà bạn chỉ có thể lấy 100 trạng thái. –

1

Điều này đã hoạt động như một tuần trước, đặt cược tốt nhất của chúng tôi để khắc phục sự cố này là đăng trên http://developers.facebook.com/bugs/155458081230560 để các nhà phát triển facebook biết mức độ lớn của vấn đề này.

+0

có vẻ như nó đang đạt được một số động lực. hy vọng họ sẽ sửa chữa nó sớm. –

0

Facebook đã đóng lỗi trước đó mà không thực sự thử nghiệm để thấy rằng nó không hoạt động. Tôi đã thực hiện một lỗi mới tại đây: https://developers.facebook.com/bugs/242235199184053

+0

Thực ra, họ không nói thế. Họ nói rằng giới hạn 100 là do thiết kế. Xem câu trả lời cập nhật của tôi với thông tin bổ sung. – DMCS

3

PagingKể từ, Cho đến thông số không làm việc cho tôi quá.

Nhưng tôi phát hiện ra rằng tôi có thể nhận được hơn 100 trạng thái bằng cách sử dụng thông số Bù trừ. Đây là mã của tôi sử dụng Facebook C# SDK:

var fb = new FacebookClient(accessToken); 

string connection = "statuses"; 
string urltemplate = "https://graph.facebook.com/me/{0}?limit={1}&offset={2}"; 

int limit = 25;  //items on one page (Max is value 100) 
int offset = 0; 

var statuses = (IDictionary<string, object>)fb.Get(string.Format(urltemplate, connection, limit, offset)); 

while (statuses != null && statuses.ContainsKey("data") && ((Facebook.JsonArray)statuses["data"]).Count > 0) 
{ 
    var dataItems = (Facebook.JsonArray)statuses["data"]; 

    foreach (Facebook.JsonObject item in dataItems) 
    { 
     //TODO: process item data 
     System.Diagnostics.Debug.WriteLine(item["message"]); 
    } 

    offset += limit; 
    statuses = (IDictionary<string, object>)fb.Get(string.Format(urltemplate, connection, limit, offset)); 
} 
6

Nó không làm việc. Bạn phải sử dụng cả tham số truy vấn limitoffset. Thông số limit đặt kích thước lô. Tham số offset đặt vị trí trong bộ sưu tập trạng thái toàn thời gian của người dùng. Nếu không chỉ định tham số offset, Facebook mặc định là 0, đó là lý do tại sao bạn tiếp tục thấy cùng một tập dữ liệu.

Đối với lô 100 trạng thái đầu tiên, hãy đặt limit thành 100offset tới 0.
Đối với lô thứ hai gồm 100 trạng thái, hãy đặt limit thành 100offset đến 100.
Đối với lô thứ ba gồm 100 trạng thái, hãy đặt limit thành 100offset đến 200.
Đối với lô thứ tư gồm 100 trạng thái, hãy đặt limit thành 100offset đến 300.
Và vân vân ...

Giữ lặp lại cho đến khi bạn nhận được một tập dữ liệu rỗng:

{ 
    "data": [] 
} 
+0

cảm ơn rất nhiều vì điều này. – n1c9

Các vấn đề liên quan