Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ウェブAPIのためのRパッケージ作成の勘所

 ウェブAPIのためのRパッケージ作成の勘所

第59回R勉強会@東京での発表資料です。

C95cdabc569dc4c7750d776687f66037?s=128

yutannihilation

March 18, 2017
Tweet

Transcript

  1. ウェブ のための パッケージ作成の勘所 湯谷 啓明

  2. ドーモ • •某グループウェアの会 社の チームに所属 •好きな言語: 、忍殺語 •将来の夢: モジュラーシンセ廃人

  3. 本 によるスクレイピング入門 •ウェブスクレイピング •ウェブ • 初心者にも丁寧に説明! •豊富な実例!

  4. パッケージ • • 国土数値情報 • • •つくりかけ: • • •

  5. 今日話すこと • を使うにはどこから始めればいいか •困ったときのデバッグ方法 •認証についてのつらかった話(愚痴) •クレデンシャルの管理

  6. ( )

  7. の翻訳 ( )

  8. 基本はこれを読んでおけば ? わりと でも

  9. None
  10. None
  11. (参考) とは? ( )

  12. 情報収集

  13. すでに開発されているパッケージ •車輪を再発明する必要はないので、既存のものが ニーズに合うならそれを使う •ニーズに合わなかったり古くて動かなくても、実 装は参考になることがある •他言語の実装も参考になることもある

  14. ドキュメント • の仕様 • データ形式 • 認証方式 • 細かい部分は試しながらでいい •

    どのような制限事項があるかは注意して読む • の利用規約 • データがどういうライセンスなのか • クレジット表示の必要があるか
  15. 例:国土数値情報 ( ) ※ パッケージに日本語を含めるのはつらい。。 (参考: )

  16. を使ってみる

  17. まずは簡単そうなものから •認証不要の •指定するパラメータが少なくていい •返ってくるデータが単純な構造の

  18. 結果のデータ構造を見る •どんなデータ形式か( ? ?) •ほしいデータがどこにあるか

  19. 結果のデータ構造を見る: •データの構造を表示する •慣れるまで時間がかかるけど、キーボードしか触 りたくないという人には便利 •引数を付けて表示を制限 • 長いベクトルやリストをど こまで表示するかを指定 • ネストしたリストを何階層まで下るか

    を指定
  20. 結果のデータ構造を見る: ( )

  21. 結果のデータ構造を見る: ( 、 ) ※ にはリリースされていないので でインストール

  22. 結果のデータ構造を見る とりあえず結果をファイルに保存しておくと、あ とでいろいろ試すときに便利 • レスポンス をまるごとバイナリとして保存 • レスポンスをまる ごと のコードとして保存

    • レスポンスボディだけでいいなら でも
  23. とりあえずデータフレーム化を目指す

  24. にも期待! ( )

  25. うまく動かない時

  26. まずはエラーを確認 •ステータスコードとレスポンスボディ ステータスコード。 ならたぶん成功、 ~なら失敗 レスポンスボディ。 エラーメッセージが入っていることがある。

  27. 例: 認証に失敗しました。アプリケーション を確認して下さい。 ステータスコードは だけどエラー!!! (このパターンはたまにあります。 ドキュメント読みましょう )

  28. 送信しているリクエストを確認 オブジェクトの中身 •実は の中に入っている

  29. 送信しているリクエストを確認 オブジェクトの中身 •リクエストボディも入っている。ただし 型に なっているのに注意。

  30. 送信しているリクエストを確認 •送ったリクエストのヘッダや中身を返すウェブ サービス

  31. 認証

  32. 認証はつらい。

  33. よくある認証方式 •認証なし:楽 •個人用アクセストークン:楽 •ユーザ名とパスワード:楽だけど注意 • うっかり漏れるとやばい • アクセストークン:注意 • の

    が特殊なことも割とある • の実装がバグっていることも •署名を付ける系:死ぬほど大変
  34. よくある認証方式: 個人用アクセストークン •例: など •どこに保存するかが悩みどころ(後述)

  35. よくある認証方式: •「よくある」けど、実装はいろいろ •実装側に任されている部分が大きいので、 がすべてのケースをカバーできるわけではない • レポジトリの 以下のコードを参照 •特に に関しては、 の実装が適当

    な感じがする (後述)
  36. 例: を使うと書かれている ( )

  37. 例: •トークンの取得は成功する。 •でもトークンを使おうとするとエラーが

  38. 例: ヘッダの形式が独自だった (注:これは 違反ではない。 トークンを別の 認証方式に転用することを禁じる理由はない) よくあるヘッダはこう (そして はこれしかサポートしていない )

  39. 例: •英語だとエラーにならないが日本語だとエラーに 写輪眼

  40. 例: の の実装がバグってる ! ( )

  41. 例: •ブラウザが開いて承認を求められるところまでは いくけど、エラーが • で調べるとレスポンスにこんなのが。 が余計らしい。

  42. 例: の 実装がサボってる! (バグとまでは言えないのがつらいところ ) ( )

  43. よくある認証方式:署名 •リクエストの要素をあるルールでひとつの文字列 に結合、そのハッシュ値をとる。 •例: 、 •自前で実装するとなるとけっこう大変。バグりが ち( しかり)。 •まあでもそんな機会はほぼないはず ※私は一度あって死にました。

  44. 認証方式のまとめ •世の中わりとバグっている •気合と根性で乗り切る •実例から学ぶしかないので、「 によるスクレイ ピング入門」をお手元に一冊是非ッッ!

  45. クレデンシャルの管理

  46. 認証はつらい。

  47. クレデンシャルとは •ユーザ認証に使われる情報。具体的には 、パ スワード、アクセストークンなど。 •うっかり に公開してしまうとまずい。 •まあそんなうっかりな人いないですよね?

  48. ヒント:

  49. None
  50. クレデンシャルを守るために •ユーザにはコンソールに打ち込ませない • 環境変数 • •ファイルに保存する場合は、 の管理下に置か ない • •

    レポジトリとは別の場所に置く
  51. 認証の場合 コンソールで を打 ち込む( の場合) ブラウザが開いて別のユーザ認証が動く トークン発行 というフローなので、 が漏れても致命 的ではない(

    は公開 !と言っている)。
  52. 認証の場合 •取得したトークンは漏れるとまずい。 •トークンをローカルに保存する場合、 が というファイルをつくる。 •このファイルは、 に追記されるので 安心!

  53. None
  54. 認証以外の場合 •漏れると即アウトのものが多い • は面倒を見てくれないので自分でやる必要 がある。

  55. インタラクティブな環境変数の指定 • でプロンプ トを立ち上げる。

  56. による環境変数の指定 • のセッション立ち上げ時に読み 込まれるファイル。環境変数を指定する。 •ワーキングディレクトリではなく、ユーザのホー ムディレクトリに配置。 •つまり、レポジトリ外にあるファイルなので に誤って取り込まれる可能性は低い。安心!

  57. による環境変数の指定 ホームディレクトリの特定 そこに以下の内容の を作成 追記 セッションを再起動、環境変数があるか確認 なら ユーザ なら ユーザになる?

    最後は空行  のコードではないので記法が違う
  58. None
  59. クレデンシャルの管理のまとめ •環境変数やポップアップを駆使して、なるべくコ ンソールでクレデンシャルを打ち込ませないよう にしましょう •がんばっても結果に結びつかないこともあるけど 強く生きていきましょう

  60. 最後に

  61. •ウェブ の世界はまだまだ •今日話した部分は、今の私の力量では体系的に書 けなかったことで心残り •ぜひ本を買ってマサカリをください •あと、 とウェブ 関連で困ってることがあれ ばお気軽にご相談ください

  62. 買って、マサカリをぜひ。 によるスクレイピング入門 •ウェブスクレイピング •ウェブ • 初心者にも丁寧に説明! •豊富な実例!