views:

67

answers:

2

So in keeping with my last question, I'm working on scraping the friends feed from Twitter. I followed a tutorial to get this script written, pretty much step by step, so I'm not really sure what is wrong with it, and I'm not seeing any error messages. I've never really used cURL before save from the shell, and I'm extremely new to PHP so please bear with me.

<html>
<head>
<title>Twitcap</title>
</head>
<body>
<?php
  function twitcap()
  {
    // Set your username and password
    $user = 'osoleve';
    $pass = '****';

    // Set site in handler for cURL to download
    $ch = curl_init("https://twitter.com/statuses/friends_timeline.xml");

    // Set cURL's option
    curl_setopt($ch,CURLOPT_HEADER,1); // We want to see the header
    curl_setopt($ch,CURLOPT_TIMEOUT,30); // Set timeout to 30s
    curl_setopt($ch,CURLOPT_USERPWD,$user.':'.$pass); // Set uname/pass
    curl_setopt($ch,CURLOPT_RETURNTRANSER,1); // Do not send to screen

    // For debugging purposes, comment when finished
    curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,0);
    curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,0);

    // Execute the cURL command
    $result = curl_exec($ch);

    // Remove the header
    // We only want everything after <?
    $data = strstr($result, '<?');

    // Return the data
    $xml = new SimpleXMLElement($data);
    return $xml;
  }

  $xml = twitcap();
  echo $xml->status[0]->text;
?>
</body>
</html>
+1  A: 

Wouldn't you actually need everything after "?>" ?

$data = strstr($result,'?>');

Also, are you using a free web host? I once had an issue where my hosting provider blocked access to Twitter due to people spamming it.

George
A: 

note that if you use strstr the returend string will actually include the needle-string. so you have to strip of the first 2 chars from the string

i would rather recommend a combination of the function substr and strpos!

anways, i think simplexml should be able to handle this header meaning i think this step is not necessary!

furthermore if i open the url i don't see the like header! and if strstr doesnt find the string it returns false, so you dont have any data in your current script

instead of $data = strstr($result, '<?'); try this:

if(strpos('?>',$data) !== false) {
$data = strstr($result, '?>');
} else {
$data = $result;
}
Joe Hopfgartner