19

OCamlを使用して Yahoo Finance API にアクセスしたいと考えています。基本的には、Yahoo Finance から見積もりを取得するための一連の HTTP 要求にすぎません。

どのモジュールを使用する必要がありますか?

非同期の HTTP リクエストが必要です。

4

2 に答える 2

23

lwtを使用する可能性があります:

  • ocsigenには、非常に完全で少し複雑な実装があります
  • cohttpは少し単純ですが、いくつかの便利な部分が欠けています

opamを使用してインストールします。

$ opam install ocsigenserver cohttp

たとえば、トップレベルでは:

try Topdirs.dir_directory (Sys.getenv "OCAML_TOPLEVEL_PATH") with _ -> ();;
#use "topfind";;
#thread;;
#require "ocsigenserver";;
open Lwt

(* a simple function to access the content of the response *)
let content = function
  | { Ocsigen_http_frame.frame_content = Some v } ->
      Ocsigen_stream.string_of_stream 100000 (Ocsigen_stream.get v)
  | _ -> return ""

(* launch both requests in parallel *)
let t = Lwt_list.map_p Ocsigen_http_client.get_url
  [ "http://ocsigen.org/";
    "http://stackoverflow.com/" ]

(* maps the result through the content function *)
let t2 = t >>= Lwt_list.map_p content

(* launch the event loop *)
let result = Lwt_main.run t2

およびcohttpの使用:

try Topdirs.dir_directory (Sys.getenv "OCAML_TOPLEVEL_PATH") with _ -> ();;
#use "topfind";;
#require "cohttp.lwt";;
open Lwt

(* a simple function to access the content of the response *)
let content = function
  | Some (_, body) -> Cohttp_lwt_unix.Body.string_of_body body
  | _ -> return ""

(* launch both requests in parallel *)
let t = Lwt_list.map_p Cohttp_lwt_unix.Client.get
  (List.map Uri.of_string
     [ "http://example.org/";
       "http://example2.org/" ])

(* maps the result through the content function *)
let t2 = t >>= Lwt_list.map_p content

(* launch the event loop *)
let v = Lwt_main.run t2

janestreetasyncライブラリのcohttpの実装も利用可能であることに注意してください

于 2013-01-03T10:08:25.707 に答える
3

念のため、 curlmultiAPIをサポートするocurlもあります。

于 2013-01-09T13:49:38.547 に答える