フリーランス 技術調査ブログ

フリーランス/エンジニア Ruby Python Nodejs Vuejs React Dockerなどの調査技術調査の備忘録

Yahoo APIをexpressから実行する

はじめに

  • yahoo api を利用したいと思い実際にAPIを利用しようとしたときにJSONP形式でデータを返す記述があり最初は見間違いだとおもったら、そのような形式があることを知りました。

JSONP とは

  • scriptタグを使用してクロスドメインなデータを取得する仕組みのことである。HTMLのscriptタグ、JavaScriptJSONを組み合わせて実現される。 クロスドメインな通信を実現する方法としては、後にオリジン間リソース共有 も開発され、JSON-Pに代わる選択肢となっている。 (参考:ウィキペディア)

非推奨らしい

  • JSONPでは、クロスサイトリクエストフォージェリ(英: cross-site request forgery、CSRF)に対する脆弱性に注意が必要である。 このscriptタグを使う方法では同一生成元ポリシーが適用されず、またサーバのエンドポイントは外部に公開されているため、悪意のあるサイトがJSONデータを取得するといったことが可能であることから、機密情報や個人情報などのデータを取り扱うには不向きである。 また、scriptタグを埋め込む側においても、リモートサイトから任意の内容のデータをページに差し込むことが可能であるため、そのリモートサイトが悪意のあるサイトである場合やJavaScriptインジェクションに対する脆弱性がある場合は、その脆弱性を突かれることで、アカウント情報を盗まれたり、元のサイトも影響を受けたりする可能性がある。

サンプルコード

router.get('/search', async (req, res, next) =>{
  const result = await axios.get('https://shopping.yahooapis.jp/ShoppingWebService/V1/json/itemSearch?appid=<API Key>&jan=9784478064801')
  .then(res =>{
    return res.data.ResultSet[0].Result[0]
  })
  res.json(result)
})

レスポンスの結果

  • 上記のサンプルコードを実行すると下記の内容がかえって来る
{"Name":"やり抜く力 人生のあらゆる成功を決める「究極の能力」を身につける/アンジェラ・ダックワース/神崎朗子","Description":"著:アンジェラ・ダックワース 訳:神崎朗子 出版社:ダイヤモンド社 発行年月:2016年09月 キーワード:ビジネス書 やりぬくちからじんせいのあらゆるせいこうお ヤリヌクチカラジンセイノアラユルセイコウオ だつくわ−す あんじえら DU ダツクワ−ス アンジエラ DU","Headline":"","Url":"https://store.shopping.yahoo.co.jp/boox/bk-4478064806.html","ReleaseDate":"","Availability":"instock","Code":"boox_BK-4478064806","Condition":"new","Image":{"Id":"boox_bk-4478064806","Small":"https://item-shopping.c.yimg.jp/i/c/boox_bk-4478064806","Medium":"https://item-shopping.c.yimg.jp/i/g/boox_bk-4478064806"},"Review":{"Rate":"0.00","Count":"2","Url":"https://shopping.yahoo.co.jp/review/item/list?store_id=boox&page_key=bk-4478064806"},"Affiliate":{"Rate":"1.0"},"Price":{"_attributes":{"currency":"JPY"},"_value":"1760"},"PremiumPrice":"","PriceLabel":{"_attributes":{"taxIncluded":"true"},"FixedPrice":"","DefaultPrice":"1760","SalePrice":"","PremiumPriceStatus":"0","PremiumPrice":"1760","PremiumDiscountType":"","PremiumDiscountRate":"","PeriodStart":"","PeriodEnd":""},"Point":{"Amount":"17","Times":"1","PremiumAmount":"17","PremiumTimes":"1"},"Shipping":{"Code":"2","Name":"送料無料"},"Category":{"Current":{"Id":"10911","Name":"自己啓発一般の本"}},"CategoryIdPath":{"0":{"Id":"1"},"1":{"Id":"10002"},"2":{"Id":"10725"},"3":{"Id":"10909"},"4":{"Id":"10911"},"_container":"Category"},"Brands":{"Name":"","Path":{"0":{"Id":""},"_container":"Brand"}},"JanCode":"9784478064801","Model":"9784478064801","IsbnCode":"","Store":{"Id":"boox","Name":"bookfan PayPayモール店","Url":"https://paypaymall.yahoo.co.jp/store/boox/top/","Payment":{"0":{"Code":"1","Name":"クレジットカード"},"1":{"Code":"16","Name":"Yahoo!ウォレットに登録しているクレジットカード"},"2":{"Code":"4096","Name":"PayPay"},"_container":"Method"},"IsBestStore":"true","Ratings":{"Rate":"4.5","Count":"52638","Total":"236990","DetailRate":"4.5"},"Image":{"Id":"boox_1","Medium":"https://item-shopping.c.yimg.jp/s/h/boox_1"},"IsPMallStore":"true"},"IsAdult":"0","Deliveryinfo":{"Area":"","Deadline":"","Day":""},"_attributes":{"index":"1"}}