Bakulogスマートフォン用の表示で見るBakulog獏の夢日記的な何か。API(WeatherHacks)を使ってみるC#備忘録兼ねて。WeatherHacksというのは商用利用でなければ自由に利用可能な気象情報APIサービスです。API(仕様はココに記載)をC#プログラムでサクッと使う方法を紹介します。Hacks)を使ってみる~コンソールアプリケーション」とかなーり激しく被っているのですが、当該記事ではJsonのパースにNewtonsoftを使っておらず、個人的にはC#でJSON捌くならNewtonsoft使う方がデファクトスタンダードだろうという認識で居るため本記事の公開に至っています。2015を用意し、適当にコンソールアプリケーションを作成します。次にJSONをパースするためにNewtonsoft.JsonをNuGetパッケージマネージャからインストールします。※普段NuGet使わない方のために補足しますが、パッケージのインストールを行うにはソリューションエクスプローラの「参照」で右クリックして「NuGetパッケージの管理...」を選択してパッケージ管理画面を開き、「参照」でオンラインから「Newtonsoft.Json」を検索するとロケットみたいなアイコンのパッケージが出るので、それをインストールすればOKです。準備が出来たらコードを書きます。ぶっちゃけ「拾ってパースする」でおしまいなので非常にシンプルです。投稿時はいささか冗長なコードを載せていたので修正しました。需要不明ですが修正前のバージョンは記事の最下部に追記として残しています。}}上のサンプルではJSONの取得結果をNewtonsoftのJObjectとしてパースし、デスクトップフォルダに"tokyo_weather.txt"という名前で保存します。プログラム中でJSONのデータを扱う方法については最後あたりに書いてあるように、Newtonsoftではデータ構造に対応して辞書式あるいは配列型のアクセスを行えば具体的にJSONの中身を取得できます。上記の例では今日の天気(「晴れ」とか「曇時々雨」とか)を取得しています。データ構造については実際にプログラムを動かして保存したデータを見るか、APIの仕様ページに載っているサンプルを参考にしてください。API叩くくらいサラッと出来ますという紹介でした。追記1:記事投稿のほぼ直後にguitarrapc_techさんが関連コードとしてGithubにコードを公開してくださいました。ありがとうございます!それで基本的には本追記の内容は「Github側のコード参考になるので是非見て下さい」という話なんですが、そのGithubコードを拝見した中でもC#とJSONという括りで紹介したい事が一つあったので、それについて追記します。本記事のサンプルコードでは「JSONはJObjectとして保持してプログラム中で使いましょー」みたいな指針を紹介しましたが、この方針だとデータへの辞書式アクセスの部分でいまいち信頼性に欠けるという欠点があります。jobj["forecast"]とtypoしていても実行前に気づくのはムリでしょう、と。この問題をラクに解決する方法としては「【C#】JSON(orXML)からクラスを自動生成」に載っているように、VSの機能を用いてJSONからC#のクラス定義を作る方法があります。コレでクラス定義を作っておくと、上でやっているJSONオブジェクトのパース処理は次のように書き換えることが出来ます(Githubの例ではココがそうです)。//...}//子要素のクラスも必要な分だけ定義される//...見た通りですがJsonConvertを使ってオブジェクトをデシリアライズしています。ノリ自体はXmlSerializerとかとよく似ていますね。(大概の場合はそうだと思いますが)レスポンスのデータ構造がキッチリ決まっているAPIではコチラの方法の方が安定するので良さげかなあと思います。追記2:上記の追記で紹介させて頂いたGithub側のコードを拝見した所サンプルコードが冗長だったのに気づき、本文側のコードを直しました。コチラには修正前の冗長なコードを反省として残しています。APIに対しては無駄に凝った手順となっています。WebRequest(とかHttpWebRequest)はもっと複雑な処理が要る場面で使うものです。}}こちらではJSON相当のStringBuilderを得るまでに7行も食ってるので絵的にだいぶアレな感じになっていますね。いうコードを書かないように気を付けましょう。FrameworkでPepperに自作機能を登録する手順タイトル通りです。Scriptでダイアログを出す方法あれこれ【Script】C#スクリプトの小ネタです。はてなブログPro獏の夢日記的な何か。xR、ロボティクス、ゲームエンジン(Unity)、モバイル(AndroidとXamarin.Forms)、C#仕事関係は原則TwitterのDMでお願いします。月別アーカイブはてなブログをはじめよう!baku_dreameaterさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。