Link to home
Create AccountLog in
Avatar of RickEpnet
RickEpnetFlag for United States of America

asked on

Twitter API with Coldfusion

All I want to do is pull RSS feeds from many Twitter users of their tweets. I seem to now need to use the API to authenticate. I need a simple way to Authenticate then then pull down 50 or so tweets from 50 users. I just take the first tweet of each user.

I have this programed already but it did not use the API authentication. I have my API key.
I loop through this code in the past to pull down the tweets.

<cfhttp url="http://twitter.com/statuses/user_timeline/89762861.rss" method="get" />
 <cfset objRSS = xmlParse(cfhttp.filecontent)> 

Then a break down the XML

Open in new window

Avatar of Proculopsis
Proculopsis


Try simulating a login with cfhttp and then use cfhttpparam to recycle the Set-Cookie collection from the responseHeader, as authentication, back into future requests.

ASKER CERTIFIED SOLUTION
Avatar of CFCanada
CFCanada

Link to home
membership
Create a free account to see this answer
Signing up is free and takes 30 seconds. No credit card required.
See answer
With this set of functions you will get the x last post of an specific user

<!--- ! function: getstatus(tu,tp,user/id,section,page,since,limit) --->
<!---
get status
tu = twitter username
tp = twitter password
user = screen_name to return status for
id = userid to return status for
section = status/timeline/mentions
page = page number to return
since = results since this id
limit = limit return results
--->    
      <cffunction name="getstatus">
        <cfargument name="tu" type="string" required="yes">
        <cfargument name="tp" type="string" required="yes">
          <cfargument name="user" type="string" required="yes">
          <cfargument name="section" type="string" required="yes">
        <cfargument name="page" type="numeric" required="no">
        <cfargument name="since" type="numeric" required="no" />
        <cfargument name="limit" required="no" type="numeric">

            <cfparam name="usertype" default="screen_name">
            <cfset baseURL = "http://twitter.com/statuses/">

        <cfswitch expression="#arguments.section#">
              <cfcase value="status">
                        <cfif isnumeric("arguments.user")>
                        <cfset geturl = "user_timeline.json?user_id=#arguments.id#">
                        <cfelse>                
                        <cfset geturl = "user_timeline.json?screen_name=#arguments.user#">
                </cfif>
            </cfcase>
              <cfcase value="timeline">
                  <cfset geturl = "friends_timeline.json?temp=0">
            </cfcase>
            <cfcase value="mentions">
                  <cfset geturl = "mentions.json?temp=0">
            </cfcase>
            </cfswitch>
          <cfif isdefined("arguments.limit")>
                  <cfset geturl = geturl & "&count=#arguments.limit#">
            </cfif>

            <cfif isdefined("arguments.page")>
                  <cfset geturl = geturl & "&page=#arguments.page#">
            </cfif>

          <cfif isdefined("arguments.since")>
                  <cfset geturl = geturl & "&since=#arguments.since#">
            </cfif>
      
            <cfset geturl = baseurl & geturl>
        <cfhttp url="#geturl#" method="get" username="#arguments.tu#" password="#arguments.tp#" result="statusmsg" />

        <cfif statusmsg.statuscode eq "200 ok">
                  <cfset statusout = deserializejson(statusmsg.filecontent)>
            <cfelse>
                  <cfset statusout = arraynew(1)>
                  <cfset statusout[1] = "fail">
                  <cfset statusout[2] = statusmsg.statuscode>
            </cfif>
          <cfreturn statusout>
    </cffunction>

<cffunction name="parseTweet" access="public" output="false" returntype="string" hint="Parse Twitter Usernames, Hashtags and URLs in a tweet">
      <cfargument name="tweet" type="string" required="true" hint="The Tweet" />

      <cfset var LOCAL = structNew() />
      <cfset LOCAL.tweet = ARGUMENTS.tweet />

      <!--- Parse the URLs as Links to the resource --->
      <cfset LOCAL.tweet = REReplace(LOCAL.tweet,
                                          '([A-Za-z]+:\/\/[A-Za-z0-9-_]+\.[A-Za-z0-9-_:%&amp;\?\/.=]+)',
                                          '<a href="\1" target="_blank" rel="nofollow">\1</a>',
                                          'ALL')
                                          />
      <!--- Parse the Usernames as Links to Twitter --->
      <cfset LOCAL.tweet = REReplace(LOCAL.tweet,
                                          '[@]+([A-Za-z0-9-_]+)',
                                          '<a href="http://twitter.com/\1" title="Lookup user @\1 on Twitter" target="_blank" rel="nofollow">@\1</a>',
                                          'ALL')
                                          />
      <!--- Parse Hashtags as Links to Twitter�s Search --->
      <cfset LOCAL.tweet = REReplace(LOCAL.tweet,
                                          '[##]+([A-Za-z0-9-_]+)',
                                          '<a href="http://search.twitter.com/search?q=%23\1" title="Search for ##\1 hashtag on Twitter" target="_blank" rel="nofollow">##\1</a>',
                                          'ALL')
                                          />

      <cfreturn LOCAL.tweet />

</cffunction>


<!---getstatus(tu,tp,user/id,section,page,since,limit)--->
       <strong>last 10 Tweets:</strong><br />
       <br />

       <cfset statusresult = getstatus([youruser],[yourpass],'[theuserid]','status',0,0,'10')>
      <!---<cfdump var="#statusresult#">--->
      <cfloop array="#statusresult#" index="k">
      <cfoutput>
      <span class="Stil1"><small>#k.created_at#</small></span><br />
      #parseTweet(k.text)#<br /><br />
      </cfoutput>
      </cfloop>
      </cfif>
Avatar of RickEpnet

ASKER

Thanks everyone I will try these and let you know in a few days.
Avatar of _agx_
@dagaz_de - Nice. Is that your own code?
You were correct. I took another look and it was an issue with my code and the way I was updating the database. I had put some code that would stop if a twitter account was not active but I should have just skipped it. Thank You.
You get rate limited if you make to many requests though.
I only request 50 an hour so I am under their limit. You can see how it displays at http://www.pigkinu.com
OK great.  Just FYI that page didnt load.
Sorry to see it it is http://www.pigskinu.com/ucla.html
Works well.  Nice site.