What should have been a fairly easy implementation turned into several frustrating hours. I was using the old Yelp API that is accessed simply by passing your yelp key in the url. But, I wanted to take advantage of some of the new functionality only available in their API version 2.0. Unfortunately Yelp API v2 requires an oAuth key/signature type access.
Having already written similar code to access the Amazon web services with a signature I thought this would be a simple as reusing some existing code. Man was I wrong. Turns out a "correctly" implemented version of oAuth is much less tolerant than AWS is. Simple things, such as what characters in the URL must be encoded, invalidated the Yelp signature.
After much searching and screwing around with various proposed implementations it became clear that the easiest and best implementation was to use the Java library provided by Yelp and simply access it from Coldfusion.
To make this process easier I've consolidated the base java functions and wrapped them in one easy to call class. You simply invoke it with your Yelp keys and it does all the dirty work. To make it work you need to download and place the 3 java JAR files in your Coldfusion java classpath (or add a class path via CF Administrator). and then call the code like this (replace the "..." key values with your actual key values:
Download three JARS and a sample .CFM here:
https://docs.google.com/leaf?id=0B-wcv3xk3UO2NjI3MTI1NmYtMmI2Yy00NzQxLTlkNzEtN2Y4ZjVjYTk5MGRk&hl=en_US
https://docs.google.com/leaf?id=0B-wcv3xk3UO2NTIzNDg5MGUtM2ExMS00MTllLWJjYTItNTQ4M2U0NjQ4MTBh&hl=en_US
https://docs.google.com/leaf?id=0B-wcv3xk3UO2MmQzNDA0YzAtYzI1Yy00N2NjLWFmNmItNjk2YmJjMmFjMjZl&hl=en_US
https://docs.google.com/leaf?id=0B-wcv3xk3UO2ZTY0ZDI2MjMtNmVlNi00YzI5LTgxMDMtYTgyNjA4ODM0NjY4&hl=en_US
Having already written similar code to access the Amazon web services with a signature I thought this would be a simple as reusing some existing code. Man was I wrong. Turns out a "correctly" implemented version of oAuth is much less tolerant than AWS is. Simple things, such as what characters in the URL must be encoded, invalidated the Yelp signature.
After much searching and screwing around with various proposed implementations it became clear that the easiest and best implementation was to use the Java library provided by Yelp and simply access it from Coldfusion.
To make this process easier I've consolidated the base java functions and wrapped them in one easy to call class. You simply invoke it with your Yelp keys and it does all the dirty work. To make it work you need to download and place the 3 java JAR files in your Coldfusion java classpath (or add a class path via CF Administrator). and then call the code like this (replace the "..." key values with your actual key values:
cfset consumerKey = "...">
cfset consumerSecret = "...">
cfset token = "...">
cfset tokenSecret = "...">
cfset yelp = CreateObject("java", "com.northbrook.yelp.Yelp").init(consumerKey, consumerSecret, token, tokenSecret)>
cfset yelp.addQueryStringParameter("location", "Northbrook*IL")>
cfset yelp.addQueryStringParameter("limit", "25")>
cfset result = yelp.query()>
cfdump var = "#result#">
Download three JARS and a sample .CFM here:
https://docs.google.com/leaf?id=0B-wcv3xk3UO2NjI3MTI1NmYtMmI2Yy00NzQxLTlkNzEtN2Y4ZjVjYTk5MGRk&hl=en_US
https://docs.google.com/leaf?id=0B-wcv3xk3UO2NTIzNDg5MGUtM2ExMS00MTllLWJjYTItNTQ4M2U0NjQ4MTBh&hl=en_US
https://docs.google.com/leaf?id=0B-wcv3xk3UO2MmQzNDA0YzAtYzI1Yy00N2NjLWFmNmItNjk2YmJjMmFjMjZl&hl=en_US
https://docs.google.com/leaf?id=0B-wcv3xk3UO2ZTY0ZDI2MjMtNmVlNi00YzI5LTgxMDMtYTgyNjA4ODM0NjY4&hl=en_US