3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Mindでcurlを使ってWebページを取得するためのライブラリ

Last updated at Posted at 2024-01-21

はじめに

 @Mind-Club_2017 さんがQiitaに次の投稿をされて興味を持ちました。

Mind Webアプリケーション(CGI)で「禅の言葉」を得てGoogle翻訳で和訳 #Webアプリケーション
https://qiita.com/Mind-Club_2017/items/ba2c4473706ba1fd7f59

 上記で紹介されたプログラムでは、Webからのデータ取得にcurlを使われていました。

(curlはWindows標準装備だったんですね。知りませんでした)

 curlは単なるWebページの取得にかぎらす、Web API として提供されるサービスのアクセスでも使うことができるので、Webページをcurl経由でMind側に取り込むのは汎用性があるのでは思い、ライブラリを作ってみました。

ライブラリのソースコード

ライブラリ
redirectcurl.src

curl受信文字列は 文字列実体 長さ 8192。

curlを実行しデータ取得とは (オプション、URL → 文字列)
		オプションは		文字列
		URLは		文字列
		エラー出力もリダイレクトは 数値 1
		起動コマンドは	文字列実体 長さ 256
		プロセスIDは 	変数
		行は			文字列

	オプションと URLに 入れ
	エラークリアし
	curl受信文字列を クリアし

	エラー出力もリダイレクト
		ならば 子のエラー出力をリダイレクト要求を セットし
		つぎに

	"curl"を	起動コマンドに 入れ
	半角空白を	起動コマンドに 一文字追加し
	"--silent"を	起動コマンドに 追加し
	半角空白を	起動コマンドに 一文字追加し
	オプションが 非空列?
		ならば オプションを 起動コマンドに 追加し
			半角空白を  起動コマンドに 一文字追加し
		つぎに
	'"'を		起動コマンドに 一文字追加し
	URLを	起動コマンドに 追加し
	'"'を		起動コマンドに 一文字追加し

	起動コマンドで 子をリダイレクトして子プロセス起動し プロセスIDに 入れ
	エラー?
		ならば 終り
		つぎに

	送り書き込みハンドルで ハンドル指定でクローズし

	ここから
		受け読み出しハンドルで ハンドル指定で一行読み出し 行に 入れ
		データ終り?
			ならば 打ち切り
			つぎに
		行を		curl受信文字列に 追加し
		改行コードを	curl受信文字列に 一文字追加し
	繰り返し

	プロセスIDで 子プロセス終了を待ち
	エラー?
		ならば エラー文字列で 重大エラー
		つぎに

	curl受信文字列を 返すこと。

 curlのオプションとURLの二つを(いずれも文字列)スタックに積んで「curlを実行しデータ取得」を実行するとデータが返されるという単純な仕様です。

 Mindで外部プログラムを実行する処理単語は複数ありますが、「・・実行」ではなく「・・起動」と名のついた処理単語はプロセスのキックだけを行い直ちに戻ってきます。そのあと、ループを組んで子プロセスからのデータを吸い上げることができます。
 受信するデータ終わるとパイプからの「一行読み出し」のあとの「データ終り?」が真を返すのでループを脱出します。

ライブラリの機能確認プログラム

ライブラリをテストするサンプルプログラムが以下です(「メインとは」付き)。

テストプログラム
redirectcurlTEST.src

"redirectcurl.src"を コンパイル。

メインとは
		受信文字列は 文字列
	起動引数個数が 1と 異なる
		ならば 「Usage: 」を 表示し
			私のプログラム名・短縮を 表示し
			「 URL」を 一行表示し
			「(注:-L オプションをこのプログラム内で設定します)」を 一行表示し
			実行終り
		つぎに
	「-L」と 起動引数(1)で curlを実行しデータ取得し 受信文字列に 入れ
	エラー?
		ならば エラー文字列で 重大エラー
		つぎに
	「--------------」を 一行表示し
	受信文字列を 一行表示し
	「--------------」を 一行表示し
	。

実行結果

 うちのサーバ内のテストページ(静的HTML)をURL指定して取得してみました。

>redirectcurlTEST https://www.scripts-lab.co.jp/info.html
--------------
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=euc-jp">
</head>
<body bgcolor="#FFFFFF">

GOLD (scripts-lab.co.jp)

</body>
</html>
--------------

3
3
13

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
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?