2011-12-23 46 views
5

Tôi nhận được lỗi API đồ thị # 613 (thông báo: "Calls to mailbox_fql have exceeded the rate of 300 calls per 600 seconds", nhập: OAuthException) khi thử nghiệm ứng dụng của mình. Đó là ứng dụng dành cho máy tính để bàn và bản sao duy nhất là bản chạy trên máy của tôi (vì vậy chỉ có một access_token và một người dùng - tôi).Lỗi: "Cuộc gọi đến mailbox_fql đã vượt quá 300 cuộc gọi mỗi 600 giây"

Tôi truy vấn điểm cuối inbox sau mỗi 15 giây hoặc lâu hơn. Kết hợp, ứng dụng tạo ra khoảng 12 cuộc gọi API (đến các điểm cuối khác nhau) mỗi phút. Nó liên tục thất bại trên bất kỳ cuộc gọi nào tìm nạp chuỗi thứ 300 (có khoảng 25 luồng trên trang đầu tiên của điểm cuối inbox và tôi chỉ tìm nạp trang đầu tiên). Tôi không thực hiện bất kỳ cuộc gọi nào với API đồ thị.

Tôi đang phát triển trên Mac OS X 10.7 sử dụng Objective-C. Tôi sử dụng NSURLConnection để gọi API đồ thị không đồng bộ. Theo như tôi biết, mỗi yêu cầu được xử lý bởi NSURLConnection chỉ nên đưa ra một yêu cầu đối với API của Facebook.

Thực hiện ở trên, tôi đang gặp khó khăn trong việc tìm ra lý do tại sao tôi nhận được lỗi này. Tôi nghi ngờ rằng đó là do một cuộc gọi đến điểm cuối inbox (tức là cuộc gọi đến URI https://graph.facebook.com/me/inbox?access_token=...) được tính là nhiều cuộc gọi đến mailbox_fql. Đặc biệt, tôi nghĩ rằng một cuộc gọi duy nhất trả về số <n> chủ đề được tính là <n> cuộc gọi chống lại mailbox_fql. Nếu trường hợp này xảy ra, có cách nào để giảm số lượng cuộc gọi đến mailbox_fql cho mỗi lệnh gọi API (ví dụ: bằng cách chỉ tìm nạp <n> các chuỗi gần đây nhất trong hộp thư đến chứ không phải toàn bộ trang đầu tiên) không?

Tài liệu có vẻ khá thưa thớt về chủ đề này, vì vậy tôi đã phải qua hầu hết thông qua thử nghiệm và lỗi. Tôi sẽ vui mừng nếu có ai biết cách giải quyết vấn đề này.

Trả lời

4

Chỉnh sửa: Nó chỉ ra rằng bạn có thể vượt qua một tham số GET limit, không ngạc nhiên, giới hạn số lượng kết quả. Tuy nhiên, Developer blog lưu ý một số hạn chế với phương pháp này (cụ thể là ít kết quả hơn yêu cầu có thể được trả lại nếu một số người không hiển thị với người dùng của bạn).

Blog đề xuất sử dụng các thông số until và/hoặc since làm thông số GET khi gọi API đồ thị chuẩn. Các tham số này nhận bất kỳ chuỗi nào có độ dài strtotime() -compliant (hoặc thời gian sử dụng Unix) và giới hạn kết quả của bạn cho phù hợp.

câu trả lời gốc sau:

Sau khi một số nghiên cứu sâu hơn, có vẻ như lựa chọn của tôi là để lấy ít thường xuyên hoặc sử dụng các truy vấn tùy chỉnh FQL để hạn chế số lượng các cuộc gọi đến mailbox_fql. Tôi đã không thể tìm thấy bất kỳ cách nào để hạn chế phản ứng của lệnh gọi API Graph tiêu chuẩn đến điểm cuối inbox. Trong trường hợp hiện tại, tôi đang sử dụng một truy vấn FQL có dạng sau:

https://graph.facebook.com/fql?q=SELECT <fields> FROM thread WHERE folder_id=1 LIMIT <n>&access_token=... 

<fields> là một danh sách bằng dấu phẩy của các lĩnh vực (được mô tả trong tài liệu chủ đề FQL của Facebook). thread là tên chữ của bảng tương ứng với điểm cuối inbox; Điểm cuối thread mới tương ứng với bảng unified_thread, nhưng chưa có sẵn công khai. folder_id=1 cho biết rằng chúng tôi muốn sử dụng hộp thư đến (trái ngược với hộp thư đi hoặc hộp thư cập nhật).

Trong thực tế, tôi đang đặt <n> thành 5, dẫn đến 200 cuộc gọi hợp lý tới mailbox_fql trong khoảng 10 phút khi sử dụng khoảng thời gian gọi 15 giây. Trong các thử nghiệm của tôi, tôi đã không nhận được lỗi # 613, vì vậy tôi đoán nó hoạt động.

Tôi tưởng tượng rằng hầu hết mọi người ở đây đều đã quen thuộc với các đầu vào của FQL, nhưng nó mới đối với tôi. Tôi hy vọng rằng điều này sẽ giúp một số người mới khác đối phó với các vấn đề tương tự!

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