How to use ColdFusion to connect to Twitter's new streaming API

Is it possible to connect to the new Twitter streaming API using ColdFusion?

I'm referring to the service documented here:

I've been able to connect to it using curl.exe and a batch file and data file (see below). Is it possible to get ColdFusion to do the same thing, just capturing the JSON data that's being sent? Once it's captured, it should be easy enough to de-serialize the JSON with CF functions and go to town.

Test.bat: (replace "AnyTwitterAccount:Password" with a twitter account and password)

curl -d @following.txt -u AnyTwitterAccount:Password



I'm looking for the mechanism to establish the connection, and capture the JSON data that streams through. After that, no problem.

Many thanks!
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

You need to use a client that can handle streaming data.  See here for connecting to the streaming api:

A quick look at the curl documentation didn't seem to suggestion either way whether it is or isn't capable of handling streaming data in this fashion.

The streaming API would be more useful on the client side and not on the server side.  eg. making a persistent AJAX connection to stream content into a div on a web page (as a simplistic example)

Server side access to twitter you would be better sticking to the standard API and using CFHTTP or CFINVOKE to make request to the API. If you need help with that - take a look at There are at least 3 twitter APIs for ColdFusion on there.
ckryancoAuthor Commented:
Thanks. The standard Twitter API works perfectly -- but the 150-requests-per-hour rate limit imposed by Twitter applies there (so a Twitter staffer suggested the streaming API, since it isn't rate-limited, for now at least...)

There's no obvious way to to use ColdFusion to maintain a streaming http connection, and I don't want to install a whole new development platform like PHP or Python (which can do this), just for this one project.

Hence the question about whether there's a way to accomplish this in ColdFusion. Thanks.
I'm not sure why a staffer at Twitter would suggest that you use the streaming API for server side applications. They should have pointed you at getting your application white listed :

However, you could use cfexecute to to run the curl command and handle the response, BUT....
Unless you are calling the template with a CFExecute from a scheduled task the client (browser) request to the template will attempt to hold open the connection for as long as the browser will let you and only as long as the request timeout setting in the coldfusion administrator or cfsetting tag.

If you are calling the template with cfexecute with a scheduled task then any client side requests will have to wait for the scheduled task to run and complete before they can access any data that is retrieved.

Both of these issues will negate any perceived benefit that you might get from using the streaming API.

Something you could potentially do, but will be exceptionally intensive on your server, would be to let a curl bat file to run continuously as a service, appending data to a file.  You could then use BlazeDS, which is built into ColdFusion 9, and an event gateway, to create a longpolling client side application that could send data back to the client in near-realtime.  That seems entirely overkill when you could just build a javascript, flash/flex, html5 application that accesses the streaming api directly.

You could also try using cfhttp with a request timeout of in excess of 30 seconds (the streaming API connection timeout), but this still has the problem that you would have with the above suggestions as well.

I really would recommend that you think about what it is that you are trying to achieve before progressing further down this line.  

Please note, that switching to PHP or Python will not solve the problem you have if you are going to use these as server side technologies. For example the following quote is from an article on using Python's pycurl to access the streaming api : "You should make sure that it is set to something that is higher than the streaming API's 30-second keep-alive interval so that the connection isn't dropped."


Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
ckryancoAuthor Commented:
Thanks again. The Twitter staffer suggested it after we applied for whitelisting, saying that Twitter is being "VERY stingy" about granting whitelisting these days because their system has been running so close to capacity for so long. (We still officially haven't heard back from Twitter about our whitelisting application...)

The streaming API was suggested as a possible way around the rate-limiting problem. But it's sure looking ugly... (This is for an application for news websites that captures tweets from groups of selected Twitter accounts of broad community interest, stores them on the local servers, and automatically posts them directly on the news websites -- such as all the Tweets from the local city/county governments.) It works perfectly using the standard Twitter API -- but Twitter won't even consider whitelisting unless the application is in production. Grrrrr....

Have you tried "just" replacing the calls to the normal api with cfhttp calls to the streaming api, treating it as if it were a normal REST api rather than a streaming API.  It might work...

You probably need to thread the requests and give them a 30 second timeout with a fall back to some previously stored data if you don't get anything back. That kind of thing.

Just a thought that went through my mind... probably holds no water...
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Web Servers

From novice to tech pro — start learning today.