2009-07-31 30 views
7

Có một họ phương thức (birddog, shadow, and follow) trong API Twitter mở một kết nối vĩnh viễn (chủ yếu) và cho phép bạn theo dõi nhiều người dùng. Tôi đã chạy mã kết nối mẫu với cURL trong bash, và nó hoạt động độc đáo: khi người dùng tôi chỉ định viết một tweet, tôi nhận được một luồng XML trong bảng điều khiển của mình.Làm cách nào để xử lý dữ liệu luồng trong PHP?

Câu hỏi của tôi là: Tôi làm cách nào để truy cập dữ liệu bằng PHP không được trả về dưới dạng cuộc gọi hàm trực tiếp nhưng được phát trực tuyến? Dữ liệu này đến không thường xuyên và không thể đoán trước, và đó không phải là điều mà tôi từng xử lý cũng như không biết bắt đầu từ đâu để tìm câu trả lời. Mọi lời khuyên và mô tả về thư viện hoặc cạm bẫy sẽ được đánh giá cao.

Trả lời

6

fopenfgets

<?php 
$sock = fopen('http://domain.tld/path/to/file', 'r'); 
$data = null; 
while(($data = fgets($sock)) == TRUE) 
{ 
    echo $data; 
} 
fclose($sock); 

này là do không có nghĩa là mã lớn (hoặc thậm chí tốt) nhưng nó nên cung cấp các chức năng mà bạn cần. Bạn sẽ cần phải thêm xử lý lỗi và phân tích dữ liệu trong số những thứ khác.

+1

Lưu ý Hỗ trợ luồng được thêm vào fopen() trong PHP 5.0 nên bạn sẽ cần ít nhất. – UnkwnTech

0

Tôi khuyên bạn nên xem xét sử dụng AJAX. Im không phải là nhà phát triển PHP, nhưng tôi nghĩ rằng bạn có thể kết nối cuộc gọi AJAX với API và cập nhật trang web của bạn.

2

Tôi khá chắc chắn rằng tập lệnh của bạn sẽ hết giờ sau ~ 30 giây để nghe dữ liệu trên luồng. Ngay cả khi nó không, một khi bạn nhận được một tải máy chủ đáng kể, số lượng tuyệt đối của các kết nối mở và nghe sẽ mang lại cho máy chủ đến đầu gối của nó.

Tôi khuyên bạn nên xem giải pháp AJAX thực hiện cuộc gọi đến tập lệnh chỉ lưu trữ Hàng đợi thư. Mặc dù vậy, tôi không chắc chắn cách Twitter API hoạt động chính xác, vì vậy tôi không chắc liệu bạn có thể chạy tập lệnh khi được yêu cầu nhận tất cả các tweet hay không hoặc có một số loại daemon gắn các tweet vào một Hàng đợi hay không PHP có thể đọc và truyền lại qua cuộc gọi AJAX của bạn.

+0

Theo như tôi biết, nó chỉ là một kết nối. Twitter gửi cho tôi một XML (nó được gọi là một đối tượng?) Cho mỗi tin nhắn; máy chủ của tôi không thực hiện bất kỳ truy vấn hoạt động nào, chỉ nhận/nghe. –

+0

Tôi sẽ đề nghị thiết lập một Daemon mà chỉ cần lắng nghe (có thể được viết bằng Python, nó có thể sẽ rất đơn giản) và đổ tất cả các tweet vào một cơ sở dữ liệu MySQL. Các kịch bản PHP của bạn có thể đọc từ cơ sở dữ liệu. –

2

Có thư viện cho điều này những ngày này mà làm cho mọi việc dễ dàng hơn nhiều (và xử lý các bit tricky như reconnections, xử lý ổ cắm, TCP backoff, vv), ví dụ:

http://code.google.com/p/phirehose/

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