2012-01-17 20 views
12

Tôi đang sử dụng API Twitter để lấy các tweet từ những người dùng cụ thể. Tôi có nó làm việc chính xác như tôi muốn, ngoại trừ việc có thể cho biết có hay không một tweet cụ thể là bản gốc từ người sử dụng hoặc nếu nó là một retweet.Kể cho dù một Tweet là một người hâm mộ hay không?

Tôi đang sử dụng cuộc gọi sau đây: https://api.twitter.com/1/statuses/user_timeline.json?include_entities=true&include_rts=true&screen_name=philiprucker&count=1

Khi nhìn vào kết quả, có vẻ như tôi sẽ có thể kéo retweeted từ các kết quả và nó sẽ trả về đúng hoặc sai. Tuy nhiên, điều này chỉ trả lại chuỗi retweet.

$url = "http://api.twitter.com/1/statuses/user_timeline.xml?include_entities=true&include_rts=true&screen_name=$screen_name&count=200" ; 
$ch = curl_init($url); 
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, TRUE); 
$xml = curl_exec ($ch); 
curl_close ($ch); 

$twelement = new SimpleXMLElement($xml); 
foreach ($twelement->status as $status) { 
    $text = dbEscape(trim($status->text)); 
    $time = strtotime($status->created_at); 
    $id = $status->id; 
    $num_retweets = $status->retweet_count; 
    $retweet = $status->retweeted; 
    dbQuery("INSERT INTO `twitter` (`id`,`screen_name`,`time`,`text`,`hidden`, `numRetweets`, `retweet`) VALUES ('$id','$screen_name','$time','$text','n','$num_retweets','retweet')"); 
    // dbQuery("INSERT INTO `twitter` (`id`,`screen_name`,`time`,`text`,`hidden`) VALUES ('$id','$screen_name','$time','$text','n')"); 
} 

Đây là mã làm những gì tôi mô tả. Tôi tin rằng tất cả các mã có liên quan là có. Mọi sự trợ giúp sẽ rất được trân trọng!

Trả lời

10

Bạn đang đặt cụ thể chuỗi retweet vào bảng chứ không phải giá trị $retweet.

+0

Cũng lưu ý câu hỏi làm rõ tốt của @ Taylor bên dưới về những gì bạn đang thực sự cố gắng lưu trữ ... Tôi chỉ đang chỉ ra lỗi đánh máy của bạn. :) – jcmeloni

+4

Wow tôi cảm thấy ngu ngốc. Chỉ cần wow. Cảm ơn. Những điều nhỏ bạn bỏ lỡ sau khi xem mã tương tự trong một vài giờ. – mitchellwright

+0

@CapnCrunch nó xảy ra với tất cả mọi người .. – jcmeloni

6

Câu hỏi làm rõ nhanh: bạn đang tìm cách lưu trữ xem một tweet đã được tweet lại chưa, hoặc bạn đang tìm cách lưu trữ xem người dùng có đưa ra yêu cầu tweet lại tweet không?

Trường boolean "được tweet lại" được gắn với trạng thái là quan điểm cho người dùng thực hiện yêu cầu - nó cho biết người dùng hiện có đã tweet lại tweet hay không, không phải là tweet đã được tweet lại hay chưa. Số retweet_count khác không phải là chỉ báo tốt hơn về việc liệu tweet có được tweet lại hay không.

+1

Tôi đang cố lưu trữ xem có phải tweet của người dùng mà tôi đang tìm kiếm thực sự là nội dung gốc của riêng anh ấy hay liệu anh ấy đã tweet lại ai đó hay không. – mitchellwright

+0

Câu hỏi này rất hợp lệ và bạn chính xác hỏi nó vì đây không thực sự là những gì tôi đang cố chụp. Cảm ơn! Sẽ upvote ngoại trừ tôi không có đủ đại diện. – mitchellwright

2

Sử dụng một GET yêu cầu đơn giản cùng với Yahoo Query Language (aka YQL) để truy cập nút retweeted có thể đạt được như thế này:

jsFiddle DEMO: YQL Rest Query for Twitter Retweeted Status via JSON

Các callback json kết quả được hiển thị dưới đây:

cbfunc({ 
"query": { 
    "count": 1, 
    "created": "2012-12-31T09:51:58Z", 
    "lang": "en-US", 
    "results": { 
    "json": { 
    "retweeted": "false" 
    } 
    } 
} 
}); 

Và bạn có thể cũng có trả lại là xml quá:

<?xml version="1.0" encoding="UTF-8"?> 
<query xmlns:yahoo="http://www.yahooapis.com/v1/base.rng" 
    yahoo:count="1" yahoo:created="2012-12-31T09:54:49Z" yahoo:lang="en-US"> 
    <results> 
     <json> 
      <retweeted>false</retweeted> 
     </json> 
    </results> 
</query> 

Đây là cách YQL Statement sẽ trông như thế để trả lại retweeted nút với ether đúng hoặc sai như là kết quả:

SELECT retweeted FROM json WHERE url="https://api.twitter.com/1/statuses/user_timeline.json?include_entities=true&include_rts=true&screen_name=philiprucker&count=1" 

Và đó GET yêu cầu đơn giản là chỉ một yêu cầu ajax(); với chức năng thành công như this:

// The YQL Statement used below is shown next, starting with the word SELECT: 
// 
// SELECT retweeted FROM json WHERE url="https://api.twitter.com/1/statuses/user_timeline.json?include_entities=true&include_rts=true&screen_name=philiprucker&count=1" 
// 
// View the above YQL Statement using Yahoo Console at: 
// http://developer.yahoo.com/yql/console/?q=SELECT%20retweeted%20FROM%20json%20WHERE%20url%3D%22https%3A%2F%2Fapi.twitter.com%2F1%2Fstatuses%2Fuser_timeline.json%3Finclude_entities%3Dtrue%26include_rts%3Dtrue%26screen_name%3Dphiliprucker%26count%3D1%22&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys 
// 
// The variable 'q' below is the Yahoo Rest Query. That is provided after creating the above Yahoo Statement. 
// It's provided at the bottom of that web page. 

var q = 'http://query.yahooapis.com/v1/public/yql?q=SELECT%20retweeted%20FROM%20json%20WHERE%20url%3D%22https%3A%2F%2Fapi.twitter.com%2F1%2Fstatuses%2Fuser_timeline.json%3Finclude_entities%3Dtrue%26include_rts%3Dtrue%26screen_name%3Dphiliprucker%26count%3D1%22&format=json'; 

// Use simple jQuery .ajax along with the above YQL Rest Statement. 
// The benefit of YQL rest statement is we can select the desired node, in this case "retweeted" 
$.ajax({ 
    url: q, 
    dataType: "json", 
    success: function(data) { 

     // Enable to show the jQuery data Object received in the browsers console. 
     //console.log(data); 

     // If we have data, continue. 
     if (data) { 

      // Display retweeted value of 'true' or 'false' via browser alert. 
      alert('The retweeted status is: ' + data.query.results.json.retweeted); 

     } 

    } 
}); 

EDIT 2: Lấy toàn cầu Giá trị tweet lại.

Reference: OP's Tweet with Viewable Retweet Count

jsFiddle DEMO: YQL Rest Query for Twitter Global Retweeted Status via HTML

Thời gian này, tổng retweeted toàn cầu đếm đó tweet sẽ dữ liệu loại bỏ trực tiếp từ các trang web với các tweet Twitter. Phương pháp này không yêu cầu phải truy cập vào tweet gốc, vì mọi lần đăng lại sẽ hiển thị số lượng toàn cầu này.

Để xác minh rằng jsFiddle đang hiển thị số lượng được tweet lại thực tế, hãy tham khảo trang tweet của OP bằng liên kết được cung cấp ở trên.

Quá trình này cũng tương tự như những gì được mô tả ở trên, ngoại trừ thời gian này chúng tôi .ajax()dataTypehtml và Tuyên bố YQL là như sau:

SELECT * FROM html WHERE url="https://twitter.com/PostBaron/status/286544211556319233" AND xpath="//a[@class='request-retweeted-popup']" 

Chú ý ở trên YQL Statement rằng XPATH cũng được sử dụng để truy cập các dữ liệu cụ thể cần thiết. Điều này ngăn không cho tải xuống toàn bộ trang web HTML và chỉ dữ liệu cụ thể đó cho số lượt truy cập Số lượng Tweet toàn cầu. Điều này là có thể vì giá trị đó nằm trong neo trang web với tên lớp duy nhấtrequest-retweeted-popup. Để khám phá tên lớp đó nhanh chóng, tôi đã sử dụng công cụ Kiểm tra phần tử mà trình duyệt có khi tôi di chuột qua giá trị đó trên trang web. Khi tên lớp đã được biết, tôi đã điều chỉnh phản hồi để trả về giá trị trong các thẻ <strong> là số mà chúng tôi muốn biết.

Đương nhiên, giá trị là 0 có nghĩa là tweet chưa bao giờ được tweet lại nhưng quan trọng hơn nghĩa là đây chính là tweet gốc.

Kết quả cuối cùng là không có API Twitter là bắt buộc kể từ khi bạn xóa dữ liệu trên trang web công khai thực tế để nhận được số lượng Tweet toàn cầu toàn cầu Tweet.

$.ajax({ 
    url: q, 
    dataType: "html", 
    success: function(data) { 

     // If we have data, continue. 
     if ($(data).find('.request-retweeted-popup')) { 

      // Store the value of total retweets in this variable. 
      var totalRetweets = $(data).find('strong').text(); 

      // Show browser alert of the totalRetweets value. Change alert() to console.log() for console log browser responses. 
      alert('The following Tweet has been retweeted: ' + totalRetweets + ' times'); 

     } 

    } 
}); 
+0

Hank Gay: Vui lòng cung cấp phản hồi cho câu trả lời của tôi trong thời gian tiền thưởng của bạn. Cảm ơn bạn! – arttronics

+0

Tôi tin rằng điều này chạy vào vấn đề được đề cập trong [@ TaylorSingletary's answer] (http://stackoverflow.com/a/8902722/4203): trường 'retweeted' cho bạn biết liệu người dùng hiện có đã tweet lại tweet được đề cập hay không. Tôi muốn biết liệu các tweet được đề cập có phải là một tweet lại của tweet của người khác không. –

+0

Cảm ơn bạn đã làm rõ. Vui lòng xem EDIT 2: Retrieve Global đã Tweet lại giá trị cho câu trả lời của bạn. Chúc mừng! – arttronics

1

Trong trường hợp bất cứ ai vẫn đang đọc bài viết này, tôi nghĩ rằng có lẽ chủ đề này được cho điểm một cách ngắn gọn hơn, và là chính xác hơn đối với api hiện tại (1,1) https://stackoverflow.com/a/24041978/1449799

tl; dr kiểm tra sự tồn tại của retweeted_status trên đối tượng trạng thái.

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