Hi, I am getting following error, can you help me on this. Thanks in Advance. Error message: 2184 data twitter; 2185 length id text truncated createdAt userId userName userScreenName location description 2185! url userFollowers userFriends userListed retweet favorite $ 140; 2186 2187 2188 dcl javaobj tweets("TwitterSAS"); 2189 2190 2191 tweets.setStringField("api_key" , "&api_key." ); 2192 tweets.setStringField("api_secret" , "&api_secret." ); 2193 tweets.setStringField("search_query" , "&search_query." ); 2194 2195 2196 tweets.callVoidMethod("main"); 2197 2198 2199 tweets.callBooleanMethod("hasNext",rc); 2200 do _n_=1 to 100 while(rc); 2201 tweets.callVoidMethod("getNext"); 2202 tweets.callStringMethod("getString","id",id); 2203 tweets.callStringMethod("getString","text",text); 2204 tweets.callStringMethod("getString","truncated",truncated); 2205 tweets.callStringMethod("getString","createdAt",createdAt); 2206 tweets.callStringMethod("getString","userId",userId); 2207 tweets.callStringMethod("getString","userName",userName); 2208 tweets.callStringMethod("getString","userScreenName",userScreenName); 2209 tweets.callStringMethod("getString","location",location); 2210 tweets.callStringMethod("getString","description",description); 2211 tweets.callStringMethod("getString","url",url); 2212 tweets.callStringMethod("getString","userFollowers",userFollowers); 2213 tweets.callStringMethod("getString","userFriends",userFriends); 2214 tweets.callStringMethod("getString","userListed",userListed); 2215 tweets.callStringMethod("getString","retweet",retweet); 2216 tweets.callStringMethod("getString","favorite",favorite); 2217 output; 2218 tweets.callBooleanMethod("hasNext",rc); 2219 end; 2220 run; ERROR: Transcoding failure at line 2203 column 11. ERROR: DATA STEP Component Object failure. Aborted during the EXECUTION phase. NOTE: The SAS System stopped processing this step because of errors. WARNING: The data set WORK.TWITTER may be incomplete. When this step was stopped there were 0 observations and 16 variables. NOTE: DATA statement used (Total process time): real time 1.31 seconds cpu time 0.01 seconds /*Here is my java picklist*/ 2221 proc javainfo picklist 'base/groovy.txt'; run; Picklist URLs: file:/C:/Program%20Files/SASHome2/SASVersionedJarRepository/eclipse/plugins/activation_1.1.1.0_SAS_201 21211183202/activation.jar file:/C:/Program%20Files/SASHome2/SASVersionedJarRepository/eclipse/plugins/groovy_1.7.1.0_SAS_2012121 1183404/groovy-all.jar file:/C:/Program%20Files/SASHome2/SASVersionedJarRepository/eclipse/plugins/jansi_1.2.0.0_SAS_20121211 183401/jansi.jar file:/C:/Program%20Files/SASHome2/SASVersionedJarRepository/eclipse/plugins/jaxb_ri_2.1.12.0_SAS_20121 211183328/jaxb-api.jar file:/C:/Program%20Files/SASHome2/SASVersionedJarRepository/eclipse/plugins/jaxb_ri_2.1.12.0_SAS_20121 211183328/jaxb-impl.jar file:/C:/Program%20Files/SASHome2/SASVersionedJarRepository/eclipse/plugins/jaxb_ri_2.1.12.0_SAS_20121 211183328/jaxb1-impl.jar file:/C:/Program%20Files/SASHome2/SASVersionedJarRepository/eclipse/plugins/jaxb_ri_2.1.12.0_SAS_20121 211183328/jaxb-xjc.jar file:/C:/Program%20Files/SASHome2/SASVersionedJarRepository/eclipse/plugins/stax_api_1.0.1.a_SAS_20121 211183307/jsr173_api.jar file:/C:/Program%20Files/SASHome2/SASVersionedJarRepository/eclipse/plugins/stax_parser_4.0.8.0_SAS_20 121211183332/stax2-api.jar file:/C:/Program%20Files/SASHome2/SASVersionedJarRepository/eclipse/plugins/stax_parser_4.0.8.0_SAS_20 121211183332/wstx-asl.jar file:/C:/Program%20Files/SASHome2/SASVersionedJarRepository/eclipse/plugins/xstream_1.3.1.0_SAS_201212 11183400/xstream.jar Total URLs: 11 /*SAS code:*/ /*----------------------------------------------------------------------------------------------------------------------------------------- *-Usage Parameters */ %let api_key = <API_KEY>; %let api_secret = <API_SECRET>; /* %let search_query = %23SASGF13+OR+%23SASGF14+OR+%23SASGF15;*/ /* %let search_query = %23SASJOBS;*/ /*----------------------------------------------------------------------------------------------------------------------------------------- *-Collect Ivy Jar */ /* filename ivy "%sysfunc(pathname(work,l))/ivy.jar";*/ /* */ /* */ /* proc http*/ /* method = "get"*/ /*/* url = "http://central.maven.org/maven2/org/apache/ivy/ivy/2.3.0-rc1/ivy-2.3.0-rc1.jar"*/*/ /* url = "C:/Program%20Files/SASHome2/SASVersionedJarRepository/eclipse/plugins/groovy_1.7.1.0_SAS_20121211183404/groovy-all.jar"*/ /* out = ivy;*/ /* run;*/ ; /*----------------------------------------------------------------------------------------------------------------------------------------- *-Compile GROOVY/JAVA Classes */ filename cp temp; proc groovy classpath=cp; *add the ivy jar just downloaded and include in classpath; *we need this to use @Grab notation below for additional dependencies; /* add classpath=ivy;*/ add classpath="C:\groovy-2.4.0-rc-2\embeddable\groovy-all-2.4.0-rc-2.jar"; *the following line requires modification based on OS and SAS Version, below accurate for 9.4M1 on Linux 64; *this was necessary because JsonSlurper was not available initially; *alternatively, you could collect this with @Grab, should you groovy-all.jar not contain this module; * @Grab(group='org.codehaus.groovy', module='groovy-json', version='2.1.3'); /* add sasjar="groovy_2.1.3" version="2.1.3.0_SAS_20130517000930";*/ /* add sasjar="groovy_2.4.0" version="2.4.0.0_SAS_20121211183404";*/ submit parseonly; @Grab(group='org.codehaus.groovy.modules.http-builder', module='http-builder', version='0.7') @Grab(group='commons-codec', module='commons-codec', version='1.2') import groovy.json.JsonSlurper import org.apache.commons.codec.binary.Base64 import groovyx.net.http.HTTPBuilder import static groovyx.net.http.ContentType.JSON import static groovyx.net.http.Method.GET import static groovyx.net.http.Method.POST class TwitterApi { def api_key def api_secret def search(query) { def bearer_token = getBearerToken() def tweets = [] def api = new HTTPBuilder("https://api.twitter.com/1.1/search/tweets.json?q=${query}&count=100") api.request(GET,JSON) { req -> headers."Authorization" = "Bearer " + bearer_token response.failure = { resp, json -> println "Unexpected error: ${resp.statusLine.statusCode} : ${resp.statusLine.reasonPhrase}" resp.headers.each { println "${it.name} : ${it.value}" } ret = reader.getText() println ret } response.success = { resp, json -> json.statuses.each { tweets << [ id: it.id, text : it.text, truncated : it.truncated, createdAt : it.created_at.minus("+0000"), userId : it.user.id, userName : it.user.name, userScreenName: it.user.screen_name, location : it.user.location, description : it.user.description, url : it.user.url, userFollowers: it.user.followers_count, userFriends : it.user.friends_count, userListed : it.user.listed_count, retweet : it.retweet_count, favorite : it.favorite_count ] } } } return tweets } private getBearerToken(){ def encoded_basic = new String(Base64.encodeBase64((api_key+":"+api_secret).bytes)) def api = new HTTPBuilder("https://api.twitter.com") def access_token api.request(POST,JSON) { req -> uri.path = "/oauth2/token" headers."Content-Type" = "application/x-www-form-urlencoded;charset=UTF-8" headers."Authorization" = "Basic "+encoded_basic body = "grant_type=client_credentials" response.success = { resp, json -> access_token = json.access_token } response.failure = { resp, json -> println "Unexpected error: ${resp.statusLine.statusCode} : ${resp.statusLine.reasonPhrase}" resp.headers.each { println "${it.name} : ${it.value}" } ret = reader.getText() println ret } } return access_token } } endsubmit; submit parseonly; import java.util.ArrayList; import java.util.Iterator; import java.util.LinkedHashMap; public class TwitterSAS { public String api_key = ""; public String api_secret = ""; public String search_query = ""; public void main() { TwitterApi api = new TwitterApi(); api.setApi_key(api_key); api.setApi_secret(api_secret); tweets = api.search(search_query); iter = tweets.iterator(); } public boolean hasNext() { return iter.hasNext(); } public void getNext() { tweet = ((LinkedHashMap) (iter.next())); } public String getString(String key) { return tweet.get(key).toString(); } protected ArrayList tweets; protected Iterator iter; protected LinkedHashMap tweet; } endsubmit; quit; /*----------------------------------------------------------------------------------------------------------------------------------------- *-Add our PROC GROOVY output to CLASSPATH */ options set=classpath "%sysfunc(pathname(cp,f))"; %let search_query = %23SAS; /*----------------------------------------------------------------------------------------------------------------------------------------- *-Collect Twitter Search Results into SAS DATA SET */ data twitter; length id text truncated createdAt userId userName userScreenName location description url userFollowers userFriends userListed retweet favorite $ 140; dcl javaobj tweets("TwitterSAS"); tweets.setStringField("api_key" , "&api_key." ); tweets.setStringField("api_secret" , "&api_secret." ); tweets.setStringField("search_query" , "&search_query." ); tweets.callVoidMethod("main"); tweets.callBooleanMethod("hasNext",rc); do _n_=1 to 100 while(rc); tweets.callVoidMethod("getNext"); tweets.callStringMethod("getString","id",id); tweets.callStringMethod("getString","text",text); tweets.callStringMethod("getString","truncated",truncated); tweets.callStringMethod("getString","createdAt",createdAt); tweets.callStringMethod("getString","userId",userId); tweets.callStringMethod("getString","userName",userName); tweets.callStringMethod("getString","userScreenName",userScreenName); tweets.callStringMethod("getString","location",location); tweets.callStringMethod("getString","description",description); tweets.callStringMethod("getString","url",url); tweets.callStringMethod("getString","userFollowers",userFollowers); tweets.callStringMethod("getString","userFriends",userFriends); tweets.callStringMethod("getString","userListed",userListed); tweets.callStringMethod("getString","retweet",retweet); tweets.callStringMethod("getString","favorite",favorite); output; tweets.callBooleanMethod("hasNext",rc); end; run;
... View more