GitXplorerGitXplorer
m

ocaml-twitterstream

public
17 stars
3 forks
0 issues

Commits

List of commits on branch master.
Unverified
684c81d713a0bb59038a7ffb999cf27f586c0743

fixup README

mmariusae committed 13 years ago
Unverified
2131cbc4ee1dd7546b3af82970249446a075c210

sample program (fetch)

mmariusae committed 13 years ago
Unverified
e2e0ab59507fe3c23812350476e375e9f7bb2e54

no fetch!

mmariusae committed 13 years ago
Unverified
2093648b33b55416eb1fb212642d87646d733d9b

use json-static to parse status objects. document.

mmariusae committed 13 years ago
Unverified
a9d61252a7d425dddd8345e8a906ae27ac2c3be7

document new reconnection API.

mmariusae committed 13 years ago
Unverified
7b058397fba01cfd5f1b3e1562d3507ef2a04050

nicer api for reconnection policy.

mmariusae committed 13 years ago

README

The README file for this repository.

Twitter streaming for OCaml

An interface to the Twitter streaming API for OCaml. The main interface is through an LWT stream and can thus be used in conjuction with other LWT code.

(**
 Convert a channel of bytes (eg. raw stream output) to a
 {!Lwt_stream.t} of stautses
 *)
val stream_of_channel : 
  Lwt_io.input Lwt_io.channel -> 
  Twitterstream_message.t Lwt_stream.t
 
(**
 Open a new stream
 @param reconnect_policy the reconnection policy
 @param auth a tuple of
 @param stream the stream to connect to.
 @return producer thread and a {!Lwt_stream.t} of statuses
 *)
val open_stream :
  ?reconnect_policy:reconnect_policy ->
  string * string -> 
  [ `Custom of string | `Firehose | `Sample ] -> 
  unit Lwt.t * Twitterstream_message.t Lwt_stream.t

The first form - stream_of_channel - yields an LWT stream from an arbitrary LWT channel (eg. a streaming dump on disk). The second form establishes a new HTTP stream using Cohttp.

Example stream counter.

open Lwt

let setup_logging () =
  let open Lwt_log in
  default := channel
    ~close_mode:`Keep
    ~channel:Lwt_io.stderr
    ();
  Section.set_level Section.main Debug

let () =
  setup_logging ();
 
  let t, stream =
    Twitterstream_stream.open_stream
      ~max_tries:2 ("username", "password") `Firehose in
 
  let count = ref 0 in
 
  let tt = for_lwt status in stream do
    let open Twitterstream_message in
    let orig, message = status in 
    match message with
      | Status status ->
          let user = status#user in
          Lwt_log.info_f "%s(%d): %s"
            user#screen_name user#followers_count
            status#text
      | Delete _ -> return ()
      | Parsefail -> Lwt_log.info_f "failed to parse %s" orig 
  done in
   
  Lwt_main.run (Lwt.join [t; tt])

There is also an example included (fetch.ml).