KinkyTwits - My ColdFusion And jQuery Powered Twitter Client (Beta)

Posted February 2, 2009 at 9:29 AM by Ben Nadel

Tags: ColdFusion, Javascript / DHTML

It's taken me a long time to actually get to this point, but I finally found the time to clean up KinkyTwits, my free ColdFusion and jQuery powered Twitter client. It's not the best application out there, but if nothing else, it has some pretty cool jQuery, ColdFusion API, AJAX, and JSON examples. Plus, it runs without a database, you can pretty much drop it on your ColdFusion server and it just works (I love me some portability). You can get the source code off of my KinkyTwits Project page.

 
 
 
 
 
 
KinkyTwits - Free ColdFusion And jQuery Powered Twitter Client. 
 
 
 

Some cool features:

  • Stores data in JSON files so it can run without a database.
  • Task Bar window tab displays number of unread messages since window lost focus.
  • Custom groups allow you to filter statuses based on regular expressions.
  • Custom groups have option to remove statuses from general feed. The more people you follow, the more essential the ability to weed out posts of non-interest (ex. Woohoo! Taco Bell for lunch!).
  • Groups get visually highlighted when they contain new statuses.
  • URL shortening service runs of an interface which means you can (programmatically) swap out different services, including professional ones what require a login and track clicks).
  • You can "snooze" users if they post annoying tweets (filters statuses into "Snoozed" group automatically for a given amount of time - additional hour per snooze).
  • Heavily commented code so you can easily follow the logic.

I am sure I will be making more updates to this over time. Since I first created the front-end for this, I have learned a lot more about some cool jQuery features; so, hopefully, I will begin to clean up the interface using things like the data() method and other good stuff.




Reader Comments

Feb 2, 2009 at 9:45 AM // reply »
66 Comments

Congrats on the release Ben ... I know you've put a ton of time and effort into this project.


Feb 2, 2009 at 9:50 AM // reply »
18 Comments

Congratulations Ben.

You've put so much hard work into this, and I've been watching it ever since the first Alpha release. You should be very proud, and thank you for releasing it to the CF community.


Feb 2, 2009 at 9:50 AM // reply »
66 Comments

Excellent work, Ben!


Feb 2, 2009 at 9:58 AM // reply »
11,314 Comments

@All,

Thanks guys. When I first coded this, ALL of the code was in the public CFCs. It was a total mess. I then took it all and broke it down to having public CFC and cached CFCs. The public CFC do little more than handle the AJAX response and make calls to the cached service CFCs. I think it's a much cleaner architecture.


Feb 2, 2009 at 10:22 AM // reply »
20 Comments

You are a Coldfusion animal, nay, a jQuery animal. Really really super impressive work. Teach me! :P


Feb 2, 2009 at 10:27 AM // reply »
3 Comments

Thanks. Been waiting for this moment!

Suggestion: Put the app in a folder called kinkytwits under the folder called 2009_02_02, so that it's easier to unzip and move into a meaningful folder on our web-root structures.


Feb 2, 2009 at 10:32 AM // reply »
11,314 Comments

@jyoseph,

Thanks man, always glad to put stuff out there.

@Robert,

Sorry about that. I don't actually know great strategies for zipping. I never know if I am supposed to zip a folder or zip the contents of a folder. Then, when it gets unzip, do I zip to new folder?

The only think I know is that I hate when I unzip to a new folder (ex. site) and then I click into it and in it is another folder of the same name. Grrr! :)


Feb 2, 2009 at 12:13 PM // reply »
1 Comments

Tweet: I'm pooping....it's almost out....it's out....i'm flushing. Forgot to wipe.


Feb 2, 2009 at 12:15 PM // reply »
11,314 Comments

@Eric,

Ha ha ha ha ha.


Feb 2, 2009 at 2:45 PM // reply »
321 Comments

Post to RIAForge perhaps?


Feb 2, 2009 at 2:55 PM // reply »
42 Comments

Awesome Job Ben!


Feb 2, 2009 at 4:34 PM // reply »
76 Comments

Is there a page we can try it out on your website?


Feb 2, 2009 at 4:34 PM // reply »
76 Comments

Oh and good job btw D:


Feb 2, 2009 at 4:48 PM // reply »
11,314 Comments

@shuns,

You can't because it needs a username and password for Twitter. However, someone suggested turning this into a hosted service. Would be interested, not sure how that would work.

@Ray,

I'll try to rock that out tonight.

@Brandon,

Thanks my man.


Feb 3, 2009 at 8:50 AM // reply »
7 Comments

Wow.... awesome.

You're a machine!
;-)

Checkin' this out.


Feb 3, 2009 at 11:08 AM // reply »
211 Comments

@Ben: regarding hosted service - You just store the username/pass for the length of the session and don't store anything else but preferences in the db. Voila, hosted service. Now, I don't recommend this, but hey... there's a gazillion websites out there that follow this same model (twitpic.com, twittersheep.com, etc).


Feb 3, 2009 at 11:12 AM // reply »
11,314 Comments

@Todd,

I like the idea of a hosted service... but, if Twitter has problems with traffic and its their full-time gig - that doesn't bode well for me handling traffic as a fun project :)


Feb 3, 2009 at 11:16 AM // reply »
211 Comments

@Ben: Yup. Sounds about right. You'd have to have some kind of service that would monitor when Twitter was sucking and post a user to the message that twitter response time is slow as balls. Then again, none of the RIA twitter apps do. I think Twirl notifies me by saying that the API-usage got lowered, that's usually first sign of something going awry.


Feb 4, 2009 at 3:33 PM // reply »
14 Comments

Don't know how I missed that one, but excellent job!!!


Feb 4, 2009 at 5:01 PM // reply »
11,314 Comments

@Marcos,

Thanks man. Still working out some bugs, but its coming along.


May 6, 2009 at 4:34 PM // reply »
43 Comments

Wow Ben, this is really impressive!


May 7, 2009 at 8:25 AM // reply »
11,314 Comments

@Phillip,

Thank man :) In my spare time, I trying to revamp it again, although I don't have much time.


May 15, 2009 at 1:08 AM // reply »
22 Comments

Nice work!

One thing I noticed was in TinyURLService.cfc you were pointing to http://tinyurl.com/create.php and using regex to extract the url.

There is a TinyURL api which just simply returns the url, without tons of html. No need for the regex. Simply change create.php to api-create.php.
eg.
http://tinyurl.com/api-create.php?url=http://www.google.com
returns:
http://tinyurl.com/dehdc


May 21, 2009 at 8:24 AM // reply »
11,314 Comments

@Mike,

Thanks a lot. I thought there had to be a better API for the service, but couldn't find it.


Jul 20, 2009 at 7:18 PM // reply »
50 Comments

Arr is this for cfml 8 isnt it ?????????.
looks cool though. is their anything I can do or modify to make it work on 7. i feel left out, i want to tweet.

I keep getting error
Invalid token '{' found on line 26 at column 36

any ideas


Jul 20, 2009 at 7:31 PM // reply »
22 Comments

seems the problem is to do with the cf8/9 javascript-style create structs and arrays.

eg.
myStruct = {};
myArray = [];

try replacing {} with structNew()
and [] with arrayNew(1)
or upgrading to cf8


Jul 20, 2009 at 9:46 PM // reply »
50 Comments

can someone please post a modified Application page for use with cfml 7. I have been trying mikes idea. But i just cant get it. Or maby direct me to a good post on changeing the syntax to make cfml 7 friendly. I would love to go to version 8. But i have been working with gdiddy and they have set me up the most perfect cfml server. Flawless !_! so cant move


Jul 30, 2011 at 5:22 AM // reply »
17 Comments

Sweet, I'm loving it, I'm usin' it.


Dan
Nov 2, 2012 at 10:55 AM // reply »
5 Comments

Can this setup be used to programmatically post tweets?

I'm hoping to use a few functions out of the twitter service CFC to post tweets completely unattended. Does that capacity for re-use exist in this CFC?

I've seen some that require the user to log in interactively to post the tweets.

Thanks,
Dan


Nov 2, 2012 at 11:08 AM // reply »
12 Comments

@Dan, monkehTweets will let you store the client and user OAuth keys in the Application scope, removing the necessity to authenticate for every request. This means you can run scheduled tasks and updates through the library. http://monkehtweet.riaforge.org/


Dan
Nov 2, 2012 at 12:14 PM // reply »
5 Comments

@Matt Gifford

thanks thats awesome - What an incredible set up monkehtweets is.

oAuth and such is new territory for me.

If you will indulge and answer one more question: If i have it working now - how often will I need to update the tokens or secrets?

Thanks,
Dan


Nov 2, 2012 at 12:23 PM // reply »
12 Comments

@Dan

Once you have the tokens and secrets generated through the Twitter Application console, you will only ever need to update them if you revoke access for that application to access that particular user.

OAuth does over-confuse things, but essentially if you have one user auto-tweeting from one application, you will never have to update the token values once they are set in the Application scope, unless you choose to delete / revoke that user.


Nov 5, 2012 at 3:03 AM // reply »
1 Comments

The information in this site seems to be beautiful and also interesting.Thanks for sharing..!!



Post A Comment

Comment Etiquette: Please do not post spam. Please keep the comments on-topic. Please do not post unrelated questions or large chunks of code. And, above all, please be nice to each other - we're trying to have a good conversation here.

Please review the following issues:

Author Name:


Author Email:

Author Website:

Comment:

Supported HTML tags for formatting: <strong>bold</strong>   <em>italic</em>   <code>code</code>







  • Help Wanted - Find Your Next ColdFusion Job
Ben Nadel's Company - Epicenter Consulting Recent Blog Comments
Jun 19, 2013 at 2:01 PM
Experimenting With The Amazon Simple Storage Service (S3) API Using ColdFusion
I have coincidentally been beating my head against the S3 API for the last week or so. One big "gotcha" I had to work around was file names and paths containing spaces. Remember to URL Enco ... read »
Jun 19, 2013 at 1:27 PM
Using Slice(), Substring(), And Substr() In Javascript
very good article. By the way IE supports negative values in substr or slice in verson 10. ... read »
Jun 19, 2013 at 11:33 AM
Filter vs. ngHide With ngRepeat In AngularJS
In your assessment, is it correct to say that given a list of say 500 items its more performant to use the `ngHide` method over the `filter` method? ... read »
Jun 19, 2013 at 10:18 AM
ColdFusion Path Usage And Manipulation Overview
Anyone happen to know if the file created by getTempFile will be automatically removed at any point? Nothing mentioned in the docs, and restarting CF doesn't remove them, so it seems it needs manu ... read »
Jun 19, 2013 at 9:41 AM
Working With Inherited Collections In AngularJS
I actually just ran into this same situation with a demo I was putting together. Your implementation of multi-lvl $scope's > Mine :) ... read »
Jun 19, 2013 at 8:17 AM
My Experience With AngularJS - The Super-heroic JavaScript MVW Framework
@Prateek, to match a word or text you should use .toContain('word') that's a jasmine reference. website is : http://pivotal.github.io/jasmine/ ... read »
Jun 19, 2013 at 8:10 AM
My Experience With AngularJS - The Super-heroic JavaScript MVW Framework
Hi Guys, Actually i am doing e2e test of angular js of my project but i am not getting one thing that is how to press enter key through the test when my form is filled as i am not using a button but ... read »
Jun 18, 2013 at 9:20 PM
Mapping AngularJS Routes Onto URL Parameters And Client-Side Events
I couldn't find examples of passing multiple arguments using the when() routing statement so figured out through trial and error that you can pass multiple arguments using the following format: .whe ... read »
InVision App - Prototyping Made Beautiful With Prototyping Tools