16

デンバーRUG用にRでパッケージを作成する方法を探る方法として、datasciencetoolkitAPIの周りにRラッパーを作成するのは楽しい小さなプロジェクトになると思いました。ご想像のとおり、基本的なRツールはRCurlパッケージに含まれています。私は一見単純な問題に悩まされており、このフォーラムの誰かが私を正しい方向に向けることができるかもしれないことを望んでいます。基本的な問題は、postForm()を使用して、キーなしの文字列をcurlのデータオプションの一部として渡すことができないように見えることです。つまり、curl -d"string""address_to_api"です。

たとえば、コマンドラインから

$ curl -d "Tim O'Reilly, Archbishop Huxley" "http://www.datasciencetoolkit.org/text2people"

成功しました。ただし、POSTリクエストに追加の引数を渡す場合、postForm()には明示的なキーが必要なようです。可能なキーについてdatasciencetoolkitコードと開発者ドキュメントを調べましたが、何も見つからないようです。

余談ですが、GETリクエストを介して入力をDSTKAPIの他の部分に渡すのは非常に簡単です。例えば、

ip2coordinates <- function(ip) {
  api <- "http://www.datasciencetoolkit.org/ip2coordinates/"
  result <- getURL(paste(api, URLencode(ip), sep=""))
  names(result) <- "ip"
  return(result)
}
ip2coordinates('67.169.73.113')

望ましい結果が得られます。

明確にするために、私はDTLのオメガハットサイトのRCurlドキュメント、パッケージを含むRCurlドキュメント、およびcurlのマニュアルページを読みました。ただし、curl(またはpostForm()関数の.opts())に関して基本的なものが欠けているため、取得できないようです。

Pythonでは、基本的にhttplib.HTTPConnectionを使用して「生の」POSTリクエストを作成できます-Rで利用できるようなものですか?httpRequestパッケージのsimplePostToHost関数も調べましたが、Rセッションがロックされているように見えました(キーも必要なようです)。

FWIW、Mac10.6.7でR2.13.0を使用しています。

どんな助けでも大歓迎です。データサイエンスツールキットを試してみたい場合は、すぐにすべてのコードがgithubで利用できるようになります。

乾杯。

4

5 に答える 5

21

httrの場合、これは次のとおりです。

library(httr)
r <- POST("http://www.datasciencetoolkit.org/text2people", 
  body = "Tim O'Reilly, Archbishop Huxley")
stop_for_status(r)
content(r, "parsed", "application/json")
于 2014-07-30T20:37:37.637 に答える
6

一般に、キーが設定されていないものをPOSTしようとしている場合は、その値にダミーキーを割り当てることができます。例えば:

> postForm("http://www.datasciencetoolkit.org/text2people", a="Archbishop Huxley")
[1] "[{\"gender\":\"u\",\"first_name\":\"\",\"title\":\"archbishop\",\"surnames\":\"Huxley\",\"start_index\":44,\"end_index\":61,\"matched_string\":\"Archbishop Huxley\"},{\"gender\":\"u\",\"first_name\":\"\",\"title\":\"archbishop\",\"surnames\":\"Huxley\",\"start_index\":88,\"end_index\":105,\"matched_string\":\"Archbishop Huxley\"}]"
attr(,"Content-Type")
                charset 
"text/html"     "utf-8" 

b ="ArchbishopHuxley"などを使用した場合も同じように機能します。

RCurlをお楽しみください-おそらく私のお気に入りのRパッケージです。冒険心があれば、〜libcurl 7.21にアップグレードすると、curlを介していくつかの新しいメソッド(SMTPなどを含む)が公開されます。

于 2011-04-27T01:03:08.290 に答える
2

RヘルプリストのDuncanTempleLangから:

postForm()は、curl -dコマンドとは異なるスタイル(または具体的にはContent-Type)のフォーム送信を使用しています。スタイルを切り替える='POST'は同じタイプを使用しますが、簡単に推測すると、パラメーター名' a'が混乱を引き起こし、結果は空のJSON配列-"[]"になります。

簡単な回避策は、postForm()ではなくcurlPerform()を直接使用することです。

r = dynCurlReader()
curlPerform(postfields = 'Archbishop Huxley', url = 'http://www.datasciencetoolkit.org/text2people', verbose = TRUE,
             post = 1L, writefunction = r$update)
r$value()

これにより、

[1]
"[{\"gender\":\"u\",\"first_name\":\"\",\"title\":\"archbishop\",\"surnames\":\"Huxley\",\"start_index\":0,\"end_index\":17,\"matched_string\":\"Archbishop
Huxley\"}]"

fromJSON()を使用して、Rのデータに変換できます。

于 2011-04-30T16:05:10.787 に答える
1

postForm関数を介して生の文字列を渡すことに問題があるはずだということを指摘したかっただけです。たとえば、コマンドラインからcurlを使用すると、次のようになります。

    $ curl -d "Archbishop Huxley" "http://www.datasciencetoolkit.org/text2people
[{"gender":"u","first_name":"","title":"archbishop","surnames":"Huxley","start_index":0,"end_index":17,"matched_string":"Archbishop Huxley"}]

とRIで取得

> api <- "http://www.datasciencetoolkit.org/text2people"
> postForm(api, a="Archbishop Huxley")
[1] "[{\"gender\":\"u\",\"first_name\":\"\",\"title\":\"archbishop\",\"surnames\":\"Huxley\",\"start_index\":44,\"end_index\":61,\"matched_string\":\"Archbishop Huxley\"},{\"gender\":\"u\",\"first_name\":\"\",\"title\":\"archbishop\",\"surnames\":\"Huxley\",\"start_index\":88,\"end_index\":105,\"matched_string\":\"Archbishop Huxley\"}]"
attr(,"Content-Type")
                charset 
"text/html"     "utf-8" 

JSON文字列で2つの要素を返し、start_indexとend_indexのどちらにも一致しないことに注意してください。これはエンコーディングなどの問題ですか?

于 2011-04-28T15:17:58.410 に答える
1

httpRequestパッケージのsimplePostToHost関数は、ここで探していることを実行する可能性があります。

于 2011-04-28T16:58:42.087 に答える