“RUN” それは魔法の言葉

私とコンピュータの思い出を、だらだらと綴ります。最近はHSP3でのゲーム作り日記です

110.HSPでゲームを作ろう:技術研究 HTTPアクセス その1

次のゲーム&ウォッチ再現に取り掛かる前に、別のオリジナルゲームを作るための元ネタというか、技術研究をやっていこうと思う。
そのうちの1つが、HTTPアクセス。ネットの特定のページの情報をHTMLの中から拾い出して、使いたいと思っている。

HSP3.6自体にはHTTPアクセス用の命令は無いのだが、Dishであれば簡易的なアクセスができる命令が用意されている。
そのほかの方法としては、拡張モジュール"hspinet.as”を使う方法がある。
しかし、これはWindowsAPIを使うので、Androidアプリにしたときに使えない。

そういうわけで、Dishの命令で、どれだけのことができるかを試していく。
幸い、サンプルプログラムがあるので、流れを確認。
httpload命令でリクエストを投げられる。
リクエストが返ってきたら、httpinfo命令で取得できる。
それをバッファの変数に放り込んでやるという流れのようだ。

HTTPのリクエストには、GETとPOSTの二種類があって、若干動きが変わってくる。
URLにパラメータを含めて送るのがGET。POSTは良くある入力フォームなどで「送信」ボタンを押すと、入力項目のデータが渡せる方式。

今回は、天気予報の情報を取得して、抜き出すことにチャレンジ。
wttr.inというサイトに、パラメータを付けてアクセスすると、世界中の天気予報がテキストで取得できる。
例えば、ブラウザに https://wttr.in/tokyo と入力して、Enterキーを押せば、東京の天気予報が表示できる。

天気予報: tokyo

     \  /       所により曇り
   _ /"".-.     20 °C          
     \_(   ).   ↗ 45 km/h      
     /(___(__)  10 km          
                0.0 mm         
                                                       ┌─────────────┐                                                       
┌──────────────────────────────┬───────────────────────┤  火 09 11月 ├───────────────────────┬──────────────────────────────┐
│              朝              │              昼       └──────┬──────┘        夕             │              夜              │
├──────────────────────────────┼──────────────────────────────┼──────────────────────────────┼──────────────────────────────┤
│               曇り           │  _`/"".-.     驟雨または強…  │    \  /       所により曇り   │    \  /       所により曇り   │
│      .--.     +22(25) °C     │   ,\_(   ).   +22(25) °C     │  _ /"".-.     21 °C          │  _ /"".-.     20 °C          │
│   .-(    ).   ↖ 44-72 km/h   │    /(___(__)  ↑ 41-72 km/h   │    \_(   ).   ↗ 33-40 km/h   │    \_(   ).   ↗ 45-56 km/h   │
│  (___.__)__)  10 km          │    ‚‘‚‘‚‘‚‘   7 km           │    /(___(__)  10 km          │    /(___(__)  10 km          │
│               0.0 mm | 0%    │    ‚’‚’‚’‚’   5.0 mm | 99%   │               0.0 mm | 0%    │               0.0 mm | 0%    │
└──────────────────────────────┴──────────────────────────────┴──────────────────────────────┴──────────────────────────────┘
                                                       ┌─────────────┐                                                       
┌──────────────────────────────┬───────────────────────┤  水 10 11月 ├───────────────────────┬──────────────────────────────┐
│              朝              │              昼       └──────┬──────┘        夕             │              夜              │
├──────────────────────────────┼──────────────────────────────┼──────────────────────────────┼──────────────────────────────┤
│    \  /       所により曇り   │    \  /       所により曇り   │  _`/"".-.     所により雨     │    \  /       所により曇り   │
│  _ /"".-.     18 °C          │  _ /"".-.     18 °C          │   ,\_(   ).   18 °C          │  _ /"".-.     18 °C          │
│    \_(   ).   → 64-74 km/h   │    \_(   ).   → 50-58 km/h   │    /(___(__)  → 45-51 km/h   │    \_(   ).   → 46-53 km/h   │
│    /(___(__)  10 km          │    /(___(__)  10 km          │      ‘ ‘ ‘ ‘  10 km          │    /(___(__)  10 km          │
│               0.0 mm | 0%    │               0.0 mm | 0%    │     ‘ ‘ ‘ ‘   0.1 mm | 60%   │               0.0 mm | 0%    │
└──────────────────────────────┴──────────────────────────────┴──────────────────────────────┴──────────────────────────────┘
                                                       ┌─────────────┐                                                       
┌──────────────────────────────┬───────────────────────┤  木 11 11月 ├───────────────────────┬──────────────────────────────┐
│              朝              │              昼       └──────┬──────┘        夕             │              夜              │
├──────────────────────────────┼──────────────────────────────┼──────────────────────────────┼──────────────────────────────┤
│               曇り           │               曇り           │    \  /       所により曇り   │               曇り           │
│      .--.     18 °C          │      .--.     18 °C          │  _ /"".-.     18 °C          │      .--.     18 °C          │
│   .-(    ).   → 49-57 km/h   │   .-(    ).   → 52-60 km/h   │    \_(   ).   → 46-53 km/h   │   .-(    ).   → 47-54 km/h   │
│  (___.__)__)  10 km          │  (___.__)__)  10 km          │    /(___(__)  10 km          │  (___.__)__)  10 km          │
│               0.0 mm | 0%    │               0.0 mm | 0%    │               0.0 mm | 0%    │               0.0 mm | 0%    │
└──────────────────────────────┴──────────────────────────────┴──────────────────────────────┴──────────────────────────────┘
位置情報: 東京都, 日本 [34.2255804,139.294774527387]

この情報を取得して、HTMLから情報を抜き出そうとした。
HTTP操作のサンプルもあり、取得自体を行うプログラムは一から作る必要がなかった。
URLを与えて、単純にHTMLを取得することは簡単にできたのだが、もちろんHTMLのタグも付いてきているので膨大な文字数に…
これから天気予報の情報を抜き出すのは超面倒…処理も遅くなりそう。
とにかくHTMLの情報量を少なくするオプションは無いか探していたが、なかなか見つからない。

パラメータのヘルプは、https://wttr.in/:help で表示できるのだが、ここには書いていないオプションがあった。
githubのwttr.inのページを見ると、JSONで取得ができる!
JSONなら、HTMLよりはパースしやすいかなと思い、作り始めたのだが…