0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

UWSCRAdvent Calendar 2023

Day 23

UWSCRの新機能:HTTP Request

Last updated at Posted at 2023-12-22

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オブジェクトにはオブジェクト自身の状態を更新するメソッド(headerbody)とリクエストを送信するメソッド(getpost)があります。前者は戻り値として自身を返し、後者は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オブジェクトを返します。

0.14.0に含まれていませんでした。

実装はあるのですが組み込み関数としてエクスポートされていませんでした。ウッカリ!
0.15.0以降でお試しいただけるようになります。

HtmlNodeオブジェクト

パースされたHTMLドキュメントやエレメントを示すオブジェクトです。CSSセレクタによる要素の検索、エレメントのアトリビュートやテキストノードの取得などができます。

html = WebRequest('https://example.com').body
document = ParseHTML(html)
print document.findfirst("h1").text // [Example Domain]
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?