2017-12-26 55 views
0

私はSummryを実装していますが、PHP APIの接続例のみを提供しています。誰かがJSリクエストに応じる可能性はありますか?PHP cURLリクエストをnode.jsに変換する

私は本質的には、私がそれを与えるテキストをパースすることを望みます。

私は、どのようなCURLOPT_POSTFIELDSと、CURLOPT_HTTPHEADERがJSリクエストで一致するかを調べようとしましたが、無駄です。私はおそらく間違った場所を探しています。

PHPの例

$long_article = "Long article text goes here"; 

$ch = curl_init("http://api.smmry.com/&SM_API_KEY=XXXXXXXXX&SM_LENGTH=14&SM_WITH_BREAK"); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Expect:")); // Important do not remove 
curl_setopt($ch, CURLOPT_POST, true); 
curl_setopt($ch, CURLOPT_POSTFIELDS, "sm_api_input=".$long_article); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 20); 
curl_setopt($ch, CURLOPT_TIMEOUT, 20); 
$return = json_decode(curl_exec($ch), true); 
curl_close($ch); 

私は取得していますエラーはので、私は、少なくとも右のURLを打ってる{ sm_api_error: 1, sm_api_message: 'INSUFFICIENT VARIABLES' }ではJavaScript複製

... 
const request = require('request-promise'); 
... 

const long_article = 'Long article text goes here'; 
const r = request({ 
    method: 'POST', 
    uri: `http://api.smmry.com/&SM_API_KEY=${process.env.SMMRY_API_KEY}`, 
    // headers: { Authorization: 'array(Expect:)' }, 
    // body: { sm_api_input: long_article }, 
    json: true, 
}); 

request(r) 
.then((parsedBody) => { debug(parsedBody); }) 
.catch((err) => { debug(err); }); 

- それはですので、開始:

ありがとうございます!

Ollie第

答えて

1

あなたはuriに渡しているURIは、クエリ文字列を使用しようとしているが、あなたは正確にあなたが要求しているURIをフォーマットしていません。クエリ文字列は?で始まり、別のキー/値ペアは&で始まる必要があります。あなたのクエリ文字列ではなく?

変更の&を始めている:
http://api.smmry.com/&SM_API_KEY=${process.env.SMMRY_API_KEY}&SM_LENGTH=14 &SM_WITH_BREAK

へ:さらに
http://api.smmry.com/?SM_API_KEY=${process.env.SMMRY_API_KEY}&SM_LENGTH=14&SM_WITH_BREAK

、あなたが要求rを作成し、requestにその要求を渡しています。これは、要求約束モジュールがどのように機能するかではありません。 request(opts)を呼び出すと、URIへの要求が直ちに行われ、対応するPromiseが返されます。要求が完了すると、チェーンハンドラが呼び出されます(.then().catch().finally())。

const request = require('request-promise') 
const sm_api_input = 'Long article text goes here' 

request({ 
    method: 'POST', 
    headers: { 
     'Expect': '100-continue' 
    }, 
    uri: `http://api.smmry.com/?SM_API_KEY=${process.env.SMMRY_API_KEY}&SM_LENGTH=14&SM_WITH_BREAK`, 
    form: {sm_api_input}, 
    json: true, 
    timeout: 20000 
}) 
    .then(body => debug) 
    .catch(err => debug) 
+0

助けてくれてありがとうございました。QSは「&」記号になっているようです。他のapiルートも完璧に動作しているようです。「uri:http://api.smmry.com/&SM_API_KEY=${process.env.SMMRY_API_KEY}&SM_URL=http://www.bbc.co.uk/news/uk-england -oxfordshire-42238343'は本当に奇妙です。 私は上記の要求を受けました(あなたは 'uriの後に厄介なカンマが必要です)、私はまだ秘密の{{sm_api_error:1、sm_api_message: '不完全な変容'}'を得ています。 ありがとうございます:) – Ollie

+0

@Ollieリクエストに必要なすべての変数を渡していますか?これらのドキュメントを見ると、あなたのURIはあなたの 'request()'オプションでは正しくありません。私の答えをもう一度見て、更新されたURIを見て、それが動作するかどうかを見てください。 – peteb

+0

私はそれが働いている! apiキー以外のものはオプションです。 'body'から' form'に変更すると、完璧に動作します。 'uri:http://api.smmry.com/&SM_API_KEY=${process.env。SMMRY_API_KEY}、 形式:{sm_api_input} '、 あなたはそのフォーム+ URIに質問を編集した場合、私は正しいと:) – Ollie

関連する問題