HTTPリクエストを送るための関数が追加されました。Web APIやスクレイピングに利用できます。
スクレイピングを推奨するものではありません。近年では規約でスクレイピングを禁止しているサイトも多いので注意してご使用ください。
HTTPリクエスト
WebRequest
指定URLに対してGETリクエストを送信します。戻り値はWebResponseオブジェクトです。
res = WebRequest("https://gist.github.com/stuncloud/7aebcedb917e8d73d4a1887bc3ab22dd/raw/b43ccf465b27b7483a4747271633d73f7085d276/webmod.uws")
// WebResponseオブジェクトはprintするとレスポンス本文を表示する
print res
// module WebMod
// public Name = "Web module"
// endmodule
WebRequestBuilder
WebRequestBuilder関数はWebRequestオブジェクトを返します。WebRequest関数とは異なりメソッド等を詳細に設定できます。
WebRequestオブジェクト
WebRequestオブジェクトにはオブジェクト自身の状態を更新するメソッド(headerやbody)とリクエストを送信するメソッド(getやpost)があります。前者は戻り値として自身を返し、後者はWebResponseオブジェクトを返します。
// WebRequestオブジェクトの作成
request = WebRequestBuilder()
// リクエスト本文を追加、UObjectを渡した場合はjsonに自動変換
request.body(@{"foo": 1}@)
// ヘッダにContentTypeを追加
request.header('Content-Type', 'application/json')
// 指定URLにPOST
response = request.post("https://httpbin.org/post")
print response
以下のようにメソッドチェーンを書くこともできます。
response = WebRequestBuilder() _
.body(@{"foo": 1}@) _
.header('Content-Type', 'application/json') _
.post("https://httpbin.org/post")
print response
WebResponseオブジェクト
レスポンス情報を示すオブジェクトです。以下のプロパティを持ちます。
| プロパティ | 型 | 詳細 |
|---|---|---|
| status | 数値 | ステータス値 |
| statusText | 文字列 | ステータス文 |
| succeed | 真偽値 | リクエスト成否 |
| header | 連想配列 | レスポンスヘッダ |
| body | 文字列 | レスポンス本文を示す文字列、ない場合EMPTY |
| json | UObject | レスポンス本文がJSONの場合のみ有効、無効時EMPTY |
if response.succeed then
print reeponse.body
else
print response.status + ': ' + response.statusText
endif
HTTPパーサー
ParseHTML
HTML文字列をパースし、HtmlNodeオブジェクトを返します。
HtmlNodeオブジェクト
パースされたHTMLドキュメントやエレメントを示すオブジェクトです。CSSセレクタによる要素の検索、エレメントのアトリビュートやテキストノードの取得などができます。
html = WebRequest('https://example.com').body
document = ParseHTML(html)
print document.findfirst("h1").text // [Example Domain]