2010-08-08 5 views
8

Tôi đang làm việc với ứng dụng Java Twitter (sử dụng Twitter4J api). Tôi đã tạo ứng dụng và có thể xem dòng thời gian người dùng hiện tại, hồ sơ của người dùng, v.v.Đã vượt quá giới hạn tốc độ - Ứng dụng Twitter tùy chỉnh

Tuy nhiên, khi sử dụng ứng dụng có vẻ nhanh chóng vượt quá 150 yêu cầu giới hạn tốc độ giờ được đặt trên máy khách Twitter (tôi biết nhà phát triển có thể tăng điều này lên 350 trên các tài khoản đã cho, nhưng điều đó sẽ không giải quyết được cho những người dùng khác).

Chắc chắn điều này không ảnh hưởng đến tất cả khách hàng, bất kỳ ý tưởng nào về cách giải quyết vấn đề này?

Có ai biết điều gì được tính là yêu cầu không? Ví dụ, khi tôi xem hồ sơ của người dùng, tôi tải đối tượng User (twitter4j) và sau đó lấy tên màn hình, tên người dùng, mô tả người dùng, trạng thái người dùng, vv để đưa vào một đối tượng JSON - đây có phải là một cuộc gọi duy nhất để lấy đối tượng hoặc một số có bao gồm tất cả các cuộc gọi user.get ...?

Cảm ơn trước

Trả lời

4

Bạn thực sự cần phải theo dõi số lượng yêu cầu hiện tại của bạn là khi giao dịch với Twitter. Tuy nhiên, twitter dường như không làm giảm số lượng cho 304 Không được sửa đổi (ít nhất nó không phải là lần cuối cùng tôi xử lý nó), do đó hãy chắc chắn rằng không có gì phá vỡ việc sử dụng bộ nhớ đệm HTTP bình thường của bạn, và yêu cầu thực tế của bạn mỗi giờ tăng lên.

Lưu ý rằng twitter bị lỗi trong mod_gzip trên apache trong đó e-tag được tạo hình mal trong việc thay đổi nó để phản ánh rằng mã hóa nội dung khác với thực thể không được nén (đây là Điều Đúng để làm, chỉ có một lỗi trong việc thực hiện). Bởi vì điều này, chấp nhận nội dung gzipped từ twitter có nghĩa là nó sẽ không bao giờ gửi một 304, làm tăng số lượng yêu cầu của bạn, và trong nhiều trường hợp làm suy yếu lợi ích hiệu quả của việc sử dụng gzip. Do đó, nếu bạn chấp nhận gzip (thư viện web của bạn có thể làm như vậy theo mặc định, xem những gì bạn có thể thấy với một công cụ như Fiddler, tôi là một người .NET. Chỉ với một chút kiến ​​thức về Java, hãy trả lời tại mức độ giao dịch của Twitter với HTTP vì thế tôi không biết chi tiết về các thư viện web Java), hãy thử tắt tính năng này và xem liệu nó có cải thiện mọi thứ không.

+0

Cảm ơn lời khuyên - Tôi sẽ điều tra bộ đệm ẩn HTTP và đảm bảo rằng tôi đang lưu vào bộ nhớ cache các cuộc gọi một cách thích hợp. Tôi đã quản lý để xác định một phần lớn của vấn đề là khi tôi đang tạo danh sách các đối tượng JSON (ví dụ: dòng thời gian gần đây), tôi đã tìm nạp tất cả dữ liệu có thể cần thêm (ví dụ: đối với mỗi cập nhật trên dòng thời gian tôi đã lấy tất cả thông tin người dùng như tên/mô tả/số người theo dõi v.v.). Tôi đã thay đổi nó để nó chỉ lấy dữ liệu cơ bản cho danh sách và sau đó "lười biếng" tìm nạp thêm dữ liệu khi cần thiết. Cảm ơn bạn lần nữa! – rhinds

+0

FWIW, tôi báo cáo lỗi với sự tương tác giữa 304 và gzip tới twitter. Vì nó là một lỗi apache, nó có thể sẽ không được cố định ở cấp độ của họ. Lỗi apache đã được biết đến lúc apache khi tôi phát hiện ra điều này trong twitter. –

1

Hầu như mọi loại đọc từ máy chủ của Twitter (tức là bất kỳ thứ gì gọi là HTTP GET) đều được tính là một yêu cầu. Bắt thời gian người dùng, retweets, tin nhắn trực tiếp, nhận dữ liệu người dùng tất cả được tính là 1 yêu cầu mỗi. Khá nhiều cuộc gọi Twitter API duy nhất đọc từ máy chủ mà không tính đến giới hạn API của bạn đang kiểm tra để xem trạng thái giới hạn tốc độ.