vbscriptによるページソースの取得

当方、Garoonの管理者権限を持たないユーザーです。

現在、VBScript+Selenium WebDriverで、ある施設の月間予約カレンダーのページソースを取得⇒編集を加えるところを自動化し、Garoonが使用できない管理会社へ編集済カレンダー(HTML)を送付するということを行っています。

この業務を他者に引き継ぐことを考えた時、SeleniumのインストールとWebDriverのバージョン整合が非常に高いハードルになりますので、HTTPリクエストによるページソース取得にトライしていますが、認証超えができずに困っています。

HTTPリクエストによるページソース取得の可否、取得可能であればサンプルなど、ご教示いただければと思います。

よろしくお願いします。

 

(2022.12.27 加筆)

【解決】

本件、Garoonログイン済みのブラウザで所望のページを開いて認証超えを回避し、取得したテキストデータをHTMLに再構築する仕様にして目的を達成しました。

haradaさん、色々ご提案いただき、ありがとうございました。今後の参考にいたします。

「HTTPリクエストによるページソース取得にトライ」

とあります。このようなケースはREST API を使う方法が一般的と考えていました。REST APIで取得しないのは、「当方、Garoonの管理者権限を持たないユーザーです。」と関連するのでしょうか?

頻度や設備の個数にもよりますが、REST APIを使わないなら手動でブラウザで開いてスケジュールをコピーしてエクセルになどに貼り付ける作業として引き継ぎをすればよいのではないかと思いました。

コメントありがとうございます。

> 手動でブラウザで開いてスケジュールをコピーしてエクセルになどに貼り付ける…

カレンダー作成方法は、ご提示のやり方(編集は当初からExcel VBA)からスタートして、それを改良しています。

マニュアル作成が面倒なこともあり、できるところは自動化してしまえということで、スケジュールを開いたところからコピペまでをVBA化 ==> 諸事情により、Excelのインストール不問としたいため、VBScript化 ==> 次は、Selenium使用の回避だ!…と来たところでつまづいている状態です。

> REST APIで取得しないのは、…関連するのでしょうか?

”管理者による”が付いていないAPIを選択するようにしていますし、SOAP API使用のコードを書いたときは、何の問題もなく通っていますので、Garoon管理者権限の有無とは無関係と考えています。

> REST API を使う方法が一般的

仰る通りですが、それも試してはいます。

VBA/VBScript/Javascript、それぞれREST APIを使用するコードを書きましたが、どれも成功していません。(リクエストヘッダのHost指定(APIドキュメントによると必須となっている)ができないようで、Send()で引っかかります。)

あと、予約情報を取得できたとしても、日付セルへの展開と休日の処理が次のハードルとなっていて、REST APIを遠ざける要因になっているというのもあります。

 

 

「SOAP API使用のコードを書いたときは、何の問題もなく通っていますので、」

とあるので、SOAP APIはどのような環境で動かしているのでしょうか?というかSOAP APIでデータを取得したらいいのではないかと思いました。

他の方に引き継ぐ前提ならGoogle カレンダーと連携するなども検討されるとよいのではないかと思いました。chromeのバージョンアップの頻度とドライバー更新が難しい方への引き継ぎを考えたらカスタマイズ的な対応が選択肢に入れている理由が理解できませんでした。仮にREST APIで情報がとれたとしても仕様変更には追従できないのではないでしょうか?

よくあるご質問 | Google カレンダーとの同期について
https://faq.cybozu.info/alphascope/cybozu/web/garoon/Detail.aspx?id=73&isCrawler=1

ご提案、ありがとうございます。

 

> Google カレンダーと連携するなども検討されるとよいのではないかと思いました。

真っ先に検討しましたが、最終的には紙出力し、手書きでアップデートしていくという使い方をする(ここは変えられそうにもない。)ので、標題が見切れてしまったり、セル高さ:固定としたいのに、データ量によって高さが変わってしまうものは使いづらいです。また、諸般の事情により、個人アカウントでのやりとりになってしまうので、積極的な活用はしたくないといった理由で早々に落とさざるを得ませんでした。

 

> SOAP APIでデータを取得したらいいのではないかと思いました。

ScheduleGetEventsは、仕様書では、「API 実行ユーザーが参加している予定のみ取得されます。」となっています。取得対象施設の予約は、ほとんどが”API 実行ユーザーは参加していない”ので、選択肢に入れていません。

 

ScheduleGetEventsByIdなら、閲覧権限のみで取得できるようなので、利用を考えたこともあります。

パラメータに埋め込む施設IDをScheduleGetFacilitiesByIdを使って調査するところで、「原因不明のエラー」で引っかかってしまいましたので、REST APIに代替を求めたがうまくいかないので相談したという経緯です。

 

もう少し、SOAP APIであがいてみます。

 

> 仮にREST APIで情報がとれたとしても仕様変更には追従できないのではないでしょうか?

ご懸念はもっともですが、「自動化の効果」と天秤にかけた結果とご理解ください。

全て手動のときのマニュアルはありますし、業務は引き継いでも、できる限りスクリプトの面倒は見るつもりです。

(補足です)

情報が不足していました。申し訳ありません。

(誤)SOAP API使用のコードを書いたときは、何の問題もなく通っていますので、

(正)別件で、VBA上でCabinetGetFileInfoを使用したコードを書いたときは、何の問題もなく通っていますので、

でした。

このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。