2012-01-01 3 views
1

저는 티타늄을 처음 사용하며 (또 다른) 트위터 클라이언트를 구축하여 시작했습니다. 내가 만난 문제는 트위터의 Streaming API을 사용하고 싶습니다. 티타늄 데스크톱에서이를 수행하는 가장 좋은 방법을 이해하는 데 어려움을 겪고 있습니다. 작동하지 않을 것,아키텍처 : Twitter 스트리밍 API에 대한 티타늄 데스크톱

  1. 는 스트리밍 API를 사용하지 마십시오 :

    는 여기에 옵션은 내가 볼 수 있습니다.

  2. httpclient that supports streaming responses으로 연결되는 Python 브리지를 만듭니다 (Streaming API에 필요하며 연결을 종료하지 않습니다). 클라이언트가 트윗을 포맷하고 출력하는 자바 스크립트 메소드에 응답을 전달하게하십시오. (문제는 여기에 있습니다 : 내가 필요로하는 파이썬 라이브러리를 묶는 방법)
  3. 티타늄 SDK 1.1과 함께 제공되는 Javascript HttpClient를 내가 잘 모르는 영리한 방법으로 사용하십시오.
  4. 스트리밍 응답을 지원하는 HttpClient와 함께 제공되는 Titanium SDK의 1.2.0-RC2 release을 사용하십시오. 출시 노트에 스트리밍 지원으로 스트리밍 API로 작업하기에 충분한 지 판단 할 수있는 정보는 거의 없습니다.
  5. 플래시 중개자를 통한 스트리밍 지원을위한 자바 스크립트 라이브러리 twstreamer을 사용하십시오. 플래시가 티타늄 데스크톱에서 제대로 작동하지 않는다는 버그 보고서를 보았지만 잘못된 것으로 입증되기를 바랍니다.
  6. 내가 아직 생각하지 않은 또 다른 방법.

나는이 일을 어떻게 얻을 수 있는지에 대한 영리한 아이디어와 앞으로의 조언을 기대합니다. 읽어 주셔서 감사합니다!

답변

1
여기

(시험의 제비 후) 그것을 할 방법을 지원하는 옵션이 필요합니다 userstreams 사용하려는 경우 :

var xhr = Titanium.Network.createHTTPClient(); 
xhr.open("GET", "https://stream.twitter.com/1/statuses/filter.json?track=<Your-keyword-to-track>", true, '<Your-twitter-nickname>', '<Your-twitter-password>'); 
xhr.send(); 

var last_index = 0; 
function parse() { 
    var curr_index = xhr.responseText.length; 
    if (last_index == curr_index) return; // No new data 
    var s = xhr.responseText.substring(last_index, curr_index); 
    last_index = curr_index; 
    console.log(s); 
} 

var interval = setInterval(parse, 5000); 
setTimeout(function(){ 
    clearInterval(interval); 
    parse(); 
    xhr.abort(); 
}, 25000); 
+0

굉장! 이것은 표준 XMLHttpRequest에서도 작동하는 것처럼 보입니다. –

+0

@MartinVilcans : 적절한 CORS 헤더가 설정되지 않은 상태에서 XMLHttpRequests가 허용되는 도메인 간 가능합니다. 너는 너의 자신의 위치에 대하여 그것을 사용할 수 있었다 ... –

1

저는 티타늄에 익숙하지 않지만 문서를보고 있으면 Titanium.Process를 사용하여 스트리밍 응답을 처리 할 수있는 무언가를 포크하는 것이 가장 좋습니다. 이 경량 많은 옵션이 여기에 있습니다,하지만주의 당신은 당신의 OAuth 및 SSL

+0

을 좋은 생각, 당신의 생각을 apprieciate. 그것은 나에게 새로운 프로세스를 제공하지만, 점진적으로 컨텐트를 전달할 수있는 httpclient를 얻는 것이 어떻게 도움이되는지 확신 할 수 없습니다. –

+0

외부 프로세스가 스트림에서 stdout으로 가져 오는 모든 행을 씁니다. 기본적인 수준에서 이것은 curl -s -u https://stream.twitter.com/1/statuses/sample.json 일 수 있습니다. IO 처리기를 연결하십시오. write가 호출되면 파싱하고 처리 할 수있는 JSON 메시지를 받게됩니다. 이 데이터를 점진적으로 가져와야합니다. – mccv

+0

"외부 프로세스가 스트림에서 stdout으로 가져 오는 모든 라인을 출력하도록합니다."<- 이것이 내가 풀려고하는 문제입니다. 티타늄과 번들 된 httpclient는 데이터를 수신 할 때까지 데이터를 반환하지 않습니다. –

관련 문제