Я пробую твиттер API для потоковой передачи. Я мог бы успешно фильтровать твиты, используя curl, как указано здесь :
curl -d @tracking http://stream.twitter.com/1/statuses/filter.json -u <user>:<pass>
, где tracking
- простой файл с содержанием:
track=Berlin
Теперь я попытался сделать то же самое в JavaSE, используя HTTP-компоненты Apache:
UsernamePasswordCredentials creds = new UsernamePasswordCredentials(<user>, <pass>);
DefaultHttpClient httpClient = new DefaultHttpClient();
httpClient.getCredentialsProvider().setCredentials(AuthScope.ANY, creds);
HttpPost httpPost = new HttpPost("http://stream.twitter.com/1/statuses/filter.json");
HttpParams params = new BasicHttpParams();
params = params.setParameter("track", "Berlin");
httpPost.setParams(params);
try {
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity entity = httpResponse.getEntity();
if (entity != null) {
InputStream instream = entity.getContent();
String t;
BufferedReader br = new BufferedReader(new InputStreamReader(instream));
while(true) {
t = br.readLine();
if(t != null) {
linkedQueue.offer(t);
}
}
}
} catch (IOException ioe) {
System.out.println(ioe.getMessage());
}
finally{
httpClient.getConnectionManager().shutdown();
}
Когда я запускаю это, я получаю:
No filter parameters found. Expect at least one parameter: follow track
как отдельная запись в моем linkedQueue
. Кажется, что API хочет параметр в другой форме, но не может найти никакой подсказки в документации. Может кто-нибудь поделиться опытом с API или увидеть какие-либо другие проблемы с кодом? Спасибо!
EDIT
Поместить параметр фильтра в параметры было плохой идеей. Поскольку это почтовые данные, их необходимо определить как Entity
перед выполнением запроса:
StringEntity postEntity = new StringEntity("track=Berlin", "UTF-8");
postEntity.setContentType("application/x-www-form-urlencoded");
httpPost.setEntity(postEntity);
Это то, что я делал неправильно. Спасибо, Брайан!