DRYな備忘録

Don't Repeat Yourself.

facebook "og.likes" のテスト中に詰まったところ

アプリケーションからFacebookのGraph APIを叩いて、ユーザが特定のURLに「いいね」をつけさせたい。その昨日の開発およびテスト中にずっと詰まってたところメモ(エラーメッセージが不親切でござるよ?)

'(#2) Service temporarily unavailable'

たぶん、

  • (Test) Userのアクセストークンがexpiredだったりinvlaid
  • likeターゲットのURLのマークアップがアカン
  • (Test) UserをつくるときのLogin Permissionspublish_actionsを追加してない?*1

'Unsupported post request.'

たぶん、facebookページのURLをlikeしようとしてる。テスト用に使うURLにも注意が必要っぽい(後述)

公式とか

Publishing Likes

An app can publish a like action, on behalf of the user, as long as the following conditions are true:

  • The viewer of the in-app content is a Facebook user who has Facebook-authed and granted the app publish_actions permission
  • The in-app content has an Open Graph object page that is properly marked-up using Open Graph metatags
  • The viewer has intentionally clicked on a custom in-app “like button” associated with the in-app content

うーん、テスト用に使ってたURLが悪かったとか、すんませんした、としか言えない

追記 2015/02/17

開発中のサービスのURLをサブドメインで切ってpermission requiredにしたりする。で、テストでそのURLをlikeしようとすることはよくあるわけで。その時、graph APIsuccessおよびobject idを正常に返してくるのだが、テストユーザのアクティビティログには一切出てこない。

エラーならまだしも、成功してんだぞ?

一抹の不安を胸にPOST /me/og.likesするobjectのURLを適当に自分のブログ(publicであり、facebookの要求するmetaタグを持つ)にしてみたら、アクティビティログに正常に出てきた。

知見、403などのページをAPI経由でlikeすると、成功しているように見えても非同期で失敗しているのかもしれない。URLの問題なので、プロダクションリリースしたらたぶんちゃんと動くと思う。

せめてエラー返してほしい(切実)

Don't Repeat Yourself