【メモ】Laravelで簡単なAPIを実装してみる【#np2020】

Laravelへの機能実装を進めながら泥縄でいろいろ勉強するということをしています。で、ある機能を実装するのにフロントエンドはVueで実装して、データはサーバ側で取得してJSONで渡そうかというようなことを考え、APIを実装してみました。とりあえずサンプルなので使うデータは何でも良かったんですが、あとで使えるようにってことでAmazonの商品情報API(Amazon Product Advertising API)を使うことに。ASINを渡すと商品情報のJSONを返してくれるだけのシンプルなAPIです。

続きを読む

はてなブックマークの情報が取得出来なくなっていた件

20181114_01.png 毎朝自動投稿している、「昨日のブックマークまとめ」が上手く動かなくなっていたので調べてみたら、そもそも自分のはてなブックマークをAPI経由で取得できなくなってました。理由は、Atom APIのサポートが終了したこと。

はてなブックマークAtom APIのサポートを終了します – はてなブックマーク開発ブログ

この度、Atom API のご利用数が少ないこと、Atom APIと同様の機能がREST APIで提供されていることから、2018年10月31日にAtom APIのサポートを終了することとなりました。ご利用の皆様には申し訳ございませんが、REST APIへの移行をお願いいたします。

データ取得部分はPearの「Services_Hatena」を使っていたんですけど、これ内部でAtom API利用してるんですよね。まあそもそもデータ取得用のコードがすごい古いし、「Services_Hatena」も既にメンテナンスされてないし、Atom APIを終わらせるというはてなの判断も妥当だと思うので、特に何にも不満はないです。そのままにしていた自分が悪いので。ていうか、時代は変わったんだなあとしみじみ。 ちなみに一番面倒なのは、認証かなあ。

はてなブックマークAtom APIのサポートを終了します – はてなブックマーク開発ブログ

AtomAPIはWSSE認証とOAuth認証をサポートしていましたが、REST APIはOAuth認証のみをサポートしています。WSSE認証をご利用のかたは、OAuth認証に切り替えていただくようお願いいたします。

WSSE認証が廃止になるので、OAuth認証に切り替えなければならないというね。きちんと実装してもいいんだけど、ブックマークの情報を取得するだけならフィードを取得すれば良いだけだから別に良いかな。 (ただしブログ記事をはてなブックマークに自動投稿する機能は動かないまま。これはそのまま廃止で構わないかな−) 改修についてはちょっと問題も起きたので、また別の記事で。

続きを読む

【メモ】 楽天RMS APIを使ってみるテスト

rms.jpg 仕事の関係で楽天市場関連の作業をしています。 楽天市場には、店舗が自分の出品している商品情報などを取得するAPI(RMS WEB SERVICE)があるのですが、ものがものだけに情報が少なく楽天のドキュメントも最低限しかない(その上、一般ユーザー向けの「楽天ウェブサービス API」と混同しやすい)んですよね。ちゃんと理解してるのは在庫連動ソフトを作ってる会社のエンジニアくらいなのかな。ま、仕方ない。

続きを読む

Google Calendar API v3に対応する(月間イベントを取得して表示)

あるバーのスケジュール表をGoogle Calendarを利用して更新しているのですが、その表示に使用していたプログラムが動かなくなっていました。調べてみたところ、11/17で「Google Calendar API v2」が廃止になり、それを利用していたサービスはすべて「Google Calendar API v3」に移行してねと言うことだったみたいです。

Google Calendar API v2 Developer’s Guide: Protocol – Google Calendar API — Google Developers

This API is a subject to the Deprecation Policy and was shut down on November 17, 2014. Please use APIv3 instead.

なんてこったい。全くしらなんだ。 仕方が無いのでプログラムを見直し、「Google Calendar API v3」でスケジュールを取得するように変更したのですが、今までと手順が少し変わってたのでメモ代わりに何か残しておきます。

続きを読む

「Instagram APIの「/users/self/feed」がスゲー時間掛かる件」という記事を書こうとした

Instagram 最近、InstagramのAPIをあれこれいじってるんですけど、その中の自分のタイムラインを表示させるエンドポイント「/users/self/feed」がすごい時間掛かってこれどうしような?

実行環境

  • PHP 5.3.18(VirtualBox上)
  • PEAR::HTTP_Client
  • PEAR::Benchmark

計測結果(試行10回)

  1. 8.265413
あれ、直ってた。 ……それまでに5回くらい試行してその平均が9秒くらい(最大13秒最小8秒)だったのでこの記事を書こうとしたんだけど、いざ10回試行しようとしたら急に早くなってた。なんだこれ。仕方ないので、ちゃんと動くようになった計測結果を次に載せる。

計測結果(試行10回) …… 正常バージョン

  1. 1.043564
  2. 0.991059
  3. 0.973980
  4. 0.924665
  5. 0.955299
  6. 0.943549
  7. 0.964637
  8. 1.007343
  9. 0.953532
  10. 1.003612
平均時間は0.976124秒。 特に問題が起きるレベルではないかな。ただ一時的に時間が掛かるタイミングがあったのは確かなので、「そういうこともある」と覚えておくことにしよう。なんだったんだ。

続きを読む

はてなブックマークAtomAPIへの接続が上手く行っていなかった件 【解決】

はてな この件の続き。 (訂正あり)PEAR::Services_Hatenaが上手く動いていない影響でいくつか止まってます | mutter あまりに広範囲に影響がある&今まで動いていたものがそのまま動いていないので、結局はてなに問い合わせました。

質問

3/5頃より、はてなブックマークAtomAPIが上手く動いていないようなのですが、なにか仕様変更等あったのでしょうか?実行環境は、PHP5.3+PEAR::Services_Hatenaで、ユーザーネームとパスワードで認証しようとすると401が返ります。お手数ですが調査をお願いいたします。
翌日、すぐに回答が。

回答

お問い合わせの件につきまして、3月5日にはてな各種APIでのパスワードによるWSSE認証を終了しております。 http://hatena.g.hatena.ne.jp/hatena/20140305/1394012936 つきましては、パスワードからAPIキーへの変更、もしくはOAuth認証への移行をお願いいたします。 APIキーについては、下記のドキュメントをご参照いただければ幸いです。 http://developer.hatena.ne.jp/ja/documents/auth/apis/wsse
迅速な回答、ありがとうございました。が、 しらねー!

続きを読む

【メモ】 callbackで「#_=_」が付いて来てしまう件への対応

このスクリプトだと引数が落ちてしまうようです。それに対応したのがこちら (続き) 【メモ】 callbackで「#_=_」が付いて来てしまう件への対応 | mutter
どういう理屈なのか解りませんが、OAuthで認証したあとのcallbackのURLの末尾に「#_=_」が付いて来てしまうことがあるようです。検索した限りではFacebookがそういう仕様のようで、Tumblrも同じような仕様です。多分、サービス側に何らかの理由があってこうなっているんだとは思うのですが、受け取る側からするとちょっと不都合があります。 例えば、
http://hoge.com/return
というURLをcallbackに指定してリクエストを投げた場合、こんな感じで返ってきます。
http://hoge.com/return?oauth_token=xxx&oauth_verifier=yyy#_=_
んで、何らかの処理をしてサイトのトップページにリダイレクトをしてやると(例はSymfony)、
$this->redirect('hoge/index')
URLはこうなってしまいます。
http://hoge.com/#_=_
本当はこうしたいのに。
http://hoge.com
もしかしたらフレームワーク側で対処出来るのかも知れませんし、ブラウザの設定なのかも知れませんが、検索して情報を収集してみた結果「JavaScriptでアドホックな対応」というのがポピュラーなようなので、とりあえずそれに従うことにしました。

続きを読む

【PHP】 PEAR::Services_TwitterでTwitter API 1.1の検索APIに対応

前回の続き。 PEAR::Services_Twitterを使ってAPI1.1にリクエストを送る方法はこちらを読んでください。 【PHP】 PEAR::Services_TwitterでTwitter API 1.1対応 | mutter 「タイムラインから「google」という単語で検索してマッチしたツイートを取得したい」というような要求があった場合に、API1であればこんなリクエストを送れば取得出来ました。 GET search | Twitter Developers

http://search.twitter.com/search.json?q=google
API1.1では、要Authentication付きでこんなリクエストになります。 GET search/tweets | Twitter Developers
https://api.twitter.com/1.1/search/tweets.json?q=google
このリクエストをServices_Twitterで組み立てるとこんな感じになるのですが、
$obj = new Services_Twitter();
/* oAuth省略 */
$data = $obj->search->tweets(array('q' => 'google'));
実際に動かすと、
Unsupported endpoint search/tweets
と言われて動きません。問題は2つあります。
  1. Services_Twitterが「search/tweets」をサポートしていない
  2. searchの場合のリクエストURLが「http://search.twitter.com」になっている
この2つを解決してやれば、無事に動くようになります。

続きを読む