You can set both the track and follow parameters when using the /1/ statuses/filter URL.
Best practices around changing your predicate: http://apiwiki.twitter.com/Streaming-API-Documentation#UpdatingFilterPredicates I can't answer PHP questions, sorry. -John Kalucki http://twitter.com/jkalucki Services, Twitter Inc. On Aug 31, 12:32 pm, Polymatheus <[email protected]> wrote: > I've used the code above to start streaming and then dumping the > output to a text file every hour to process later. There are a few > things I want to clarify, > > 1) How can the above script be amended to show both follow and track? > Is this possible? > 2) If I opened a stream to follow 10 users and then a further 5 users > joined my site, would I have to close the first stream then open a new > stream for the 15 follows? Or just a second stream with the additional > 5 users? The second approach reduce the chance of tweets being lost > between closing and opening a new stream. > 3) I can't seem to close a stream that I opened using the sample code > above, I have tried changing the file to simply say: > > $fp = fsockopen("stream.twitter.com", 80, $errno, $errstr, 10); > fclose($fp); > > But it doesn't appear to work :/ > > Thanks in advance > > On 10 Aug, 08:09, Joel Strellner <[email protected]> wrote: > > > Tom, > > > Yes, that code works perfectly for me exactly as is. You might want to > > change the connect timeout from 10 to 30 seconds. > > > How long are you waiting before calling it quits? It does take a few > > seconds for /track to start sending your results. > > > -Joel > > > On Sun, Aug 9, 2009 at 8:17 PM, Tom Fitzgerald <[email protected]> wrote: > > > > I'm sorry Joel I keep getting a PHP timeout on the code you sent. I'll > > > troubleshoot more and see if I can give you any more details (increase > > > the maximum time, etc). Who knows, maybe its Twitter. Any other > > > thoughts? I'll get back to you more with some detailed info. Are you > > > able to get that exact code working on your server? > > > > On Aug 3, 2:12 pm, Joel Strellner <[email protected]> wrote: > > > > Hi Tom, > > > > > I am not sure about XML, since I use JSON - it has a much lower > > > > over-the-wire data size, and its easier to parse. > > > > > Let me know if the code works for you. > > > > > -Joel > > > > > On Mon, Aug 3, 2009 at 10:55 AM, Tom Fitzgerald <[email protected]> > > > wrote: > > > > > > I appreciate the reply Joel. I'll give it a try. I also tried just > > > > > downloading from the stream api with the curl command line. However I > > > > > kept getting 'malformed xml' errors. It was weird, each tweet would > > > > > have the <?xml ... tag before it. That ring any bells with you? Same > > > > > thing with JSON format but it was a different error, still malformed. > > > > > All I'm doing is > > > > > > curlhttp://stream.twitter.com/spritzer.xml-uuser:pass > > > > > > <?xml version="1.0" encoding="UTF-8"?> is the exact line I get before > > > > > every status. If I manually clean up the XML (or JSON) it works great. > > > > > > On Aug 2, 7:10 pm, Joel Strellner <[email protected]> wrote: > > > > > > Other than my username and password, this is an example that I know > > > is > > > > > > working: > > > > > > > <?php > > > > > > $count = 1; > > > > > > $startparsing = false; > > > > > > > $keyword_needles[] = 'twitter'; > > > > > > $keyword_needles[] = 'keyword2'; > > > > > > $keyword_needles[] = 'keyword3'; > > > > > > $keyword_needles[] = 'keyword4'; > > > > > > > // if your keywords have spaces, they must be urlencoded (twitter > > > does > > > > > > not support phrases, only the first keyword will be used, the space > > > > > > character and after will be ignored) > > > > > > foreach ($keyword_needles AS $i=>$needle) { > > > > > > $keyword_needles[$i] = urlencode($needle); > > > > > > > } > > > > > > > $poststr = 'track=' . implode(',', $keyword_needles); > > > > > > $fp = fsockopen("stream.twitter.com", 80, $errno, $errstr, 10); > > > > > > if (!$fp) { > > > > > > echo "$errstr ($errno)\n"; > > > > > > > } else { > > > > > > > $out = "POST /track.json HTTP/1.1\r\n"; > > > > > > $out .= "Host: stream.twitter.com\r\n"; > > > > > > $out .= "User-Agent: YourUserAgent\r\n"; > > > > > > $out .= "Referer:http://yourdomain.com\r\n"; > > > > > > $out .= "Content-Type: application/x-www-form-urlencoded\r\n"; > > > > > > $out .= "Authorization: Basic " . base64_encode > > > > > > ("username:password")."\r\n"; > > > > > > $out .= "Content-length: " . strlen($poststr) . "\r\n"; > > > > > > $out .= "Connection: Close\r\n\r\n"; > > > > > > $out .= $poststr . "\r\n\r\n"; > > > > > > > fwrite($fp, $out); > > > > > > while (!feof($fp)) { > > > > > > $line = fgets($fp, 4096); > > > > > > if ($startparsing) { > > > > > > if (trim($line) != '') { > > > > > > echo trim($line) . "\n"; > > > > > > $tweet_obj = json_decode(trim($line)); > > > > > > // do your stuff here > > > > > > } > > > > > > } > > > > > > else { > > > > > > // view the header lines: uncomment the below line > > > > > > echo trim($line) . "\n"; > > > > > > > $header_arr[] = $line; > > > > > > $headercount = count($header_arr)-1; > > > > > > > if (trim($header_arr[$headercount]) == '') { > > > > > > $startparsing = true; > > > > > > $count = 1; > > > > > > unset($header_arr, $headercount); > > > > > > } > > > > > > } > > > > > > if (trim($line) != '') $count++; > > > > > > } > > > > > > fclose($fp);} > > > > > > > ?> > > > > > > > The only changes I made was to echo things out and I added a keyword > > > > > > that I was sure would have volume - twitter. It did take a little > > > bit > > > > > > of time to connect. I am assuming that that is because of their > > > > > > current load though, and not the script. > > > > > > > On Aug 2, 2:25 am, Tom Fitzgerald <[email protected]> wrote: > > > > > > > >Joel, > > > > > > > > For some reason when I try your code I get a timeout error. Any > > > > > > > suggestions? What you have is exactly what I'm looking for. It > > > could > > > > > > > really help me out a jam, thanks! > > > > > > > > On Jul 27, 4:02 pm,JoelStrellner <[email protected]> wrote: > > > > > > > > > Here is a working example of how to do /track: > > > > > > > > > $count = 1; > > > > > > > > $startparsing = false; > > > > > > > > > $keyword_needles[] = 'keyword1'; > > > > > > > > $keyword_needles[] = 'keyword2'; > > > > > > > > $keyword_needles[] = 'keyword3'; > > > > > > > > $keyword_needles[] = 'keyword4'; > > > > > > > > > // if your keywords have spaces, they must be urlencoded > > > > > > > > (twitter > > > > > does not > > > > > > > > support phrases, only the first keyword will be used, the space > > > > > character > > > > > > > > and after will be ignored) > > > > > > > > foreach ($keyword_needles AS $i=>$needle) { > > > > > > > > $keyword_needles[$i] = urlencode($needle); > > > > > > > > > } > > > > > > > > > $poststr = 'track=' . implode(',', $keyword_needles); > > > > > > > > $fp = fsockopen("stream.twitter.com", 80, $errno, $errstr, 30); > > > > > > > > if (!$fp) { > > > > > > > > echo "$errstr ($errno)\n";} else { > > > > > > > > > $out = "POST /track.json HTTP/1.1\r\n"; > > > > > > > > $out .= "Host: stream.twitter.com\r\n"; > > > > > > > > $out .= "User-Agent: YourUserAgent\r\n"; > > > > > > > > $out .= "Referer:http://yourdomain.com\r\n"; > > > > > > > > $out .= "Content-Type: > > > application/x-www-form-urlencoded\r\n"; > > > > > > > > $out .= "Authorization: Basic " . > > > > > > > > base64_encode("username:password")."\r\n"; > > > > > > > > $out .= "Content-length: " . strlen($poststr) . "\r\n"; > > > > > > > > $out .= "Connection: Close\r\n\r\n"; > > > > > > > > $out .= $poststr . "\r\n\r\n"; > > > > > > > > > fwrite($fp, $out); > > > > > > > > while (!feof($fp)) { > > > > > > > > $line = fgets($fp, 4096); > > > > > > > > if ($startparsing) { > > > > > > > > if (trim($line) != '') { > > > > > > > > //echo trim($line) . "\n"; > > > > > > > > $tweet_obj = json_decode(trim($line)); > > > > > > > > // do your stuff here > > > > > > > > } > > > > > > > > } > > > > > > > > else { > > > > > > > > // view the header lines: uncomment the below line > > > > > > > > //echo trim($line) . "\n"; > > > > > > > > > $header_arr[] = $line; > > > > > > > > $headercount = count($header_arr)-1; > > > > > > > > > if (trim($header_arr[$headercount]) == '') { > > > > > > > > $startparsing = true; > > > > > > > > $count = 1; > > > > > > > > unset($header_arr, $headercount); > > > > > > > > } > > > > > > > > } > > > > > > > > if (trim($line) != '') $count++; > > > > > > > > } > > > > > > > > fclose($fp); > > > > > > > > > } > > > > > > > > On Mon, Jul 27, 2009 at 11:18 AM, Joseph <[email protected] > > > > > > wrote: > > > > > > > > > > I am trying to use the track streaming API, but I'm having > > > trouble > > > > > > > > > with the syntax. The example shows how to use a tracking list > > > > > stored > > > > > > > > > in a file in the format: track = word1, word2, etc.. > > > > > > > > > > I tried the following (following a successful fsockopen call > > > > > > > > > to > > > > > > > > > stream.twitter.api: > > > > > > > > > > POST /track.json track = Palin, #fubar HTTP/1.1 Host: > > > > > > > > > stream.twitter.com User-Agent: UserAgent Authorization: Basic > > > > > > > > > cGXybmFzc3TzZGV2OlBhcm5hMzT1Mzl4MDMz Connection: Close > > > > > > > > > > and I am getting the following error code: HTTP/1.1 400 Bad > > > Request > > > > > > > > > > The actual relevant test PHP code is: > > > > > > > > > > $fp = fsockopen($url, 80, $errno, $errstr, 30); > > > > > > > > > if (!$fp) { > > > > > > > > > echo > > ... > > read more »
