FacebookソーシャルプラグインのXFBML版いいねボタンを押した後に出てくるコメントフォームを出したくない

XFBMLのいいねボタンをクリックした後に出てくるコメントフォームを出ないようにする機能は提供されていないんでしょうか?

以下のページで、CSSを使って無力化する方法が紹介されている。

.fb_edge_widget_with_comment span.fb_edge_comment_widget iframe.fb_ltr {
display: none !important;}

http://stackoverflow.com/questions/3247855/facebook-like-button-how-to-disable-comment-pop-up

そういうアプローチはFacebookのポリシーに違反しているという話もある。

d. You must not obscure or cover elements of our social plugins, such as the Like button or Like box plugin.

http://developers.facebook.com/policy/#policies

規約を蔑ろにすると、問答無用でアカウント停止でアプリも停止というペナルティが待っているので、うかつに動けない状態。

どうしたものか。

UEFIのSecure Bootについて

全く分からん。

MicrosoftファームウェアでSecure Bootを制御可能にして良いと言っているけどそれを信じてもらえてない状況?
Microsoftの話じゃ無くて、Secure Bootの実装についてデバイスメーカーと約束して安心したいという話?

UEFIもSecure Bootも理解できてないのでついていけてない。

RailsのAssetHostingWithMinimumSslプラグイン

諸事情からhttps応答できないため、アセットを無理矢理httpで提供するために使ったプラグイン

config.action_controller.asset_host = AssetHostingWithMinimumSsl.new(
  "http://assets%d.example.com", # will serve non-SSL assetts on http://assets[1-4].example.com
  "https://assets1.example.com"  # will serve SSL assets on https://assets1.example.com
)

両方ともhttpって書いたら、https接続時にもアセットのURLをhttpにすることが出来ました。

が、これは本当にこれで良かったんだろうか。

ActionController::Base.asset_host = Proc.new { |source, request|
  if request.ssl?
    "#{request.protocol}#{request.host_with_port}"
  else
    "#{request.protocol}assets.example.com"
  end
}

こんなやり方もあるということで、将来的には手を加えることになりそうです。

FacebookのJavaScript SDKでいいねボタンのクリックにコールバックできるんだね

「いいねボタンといえばiframe」という頭でいるので、なかなかJavaScript SDKを使うという発想にならない。

FB.Event.subscribeでイベントをハンドリングできるので、認証やらいいねやらの後にコールバック処理を実行させられるわけです。

iframe版のいいねボタンでは出来ないと思いますが、XFBML版やHTML5版なら出来るでしょう(Social Pluginのいいねボタン話)。

さて、そろそろちゃんとしたJSの書き方を覚えなきゃいかんですね。

FacebookのGraph APIを使って任意のPageオブジェクトをいいね出来るのか?

Facebook内のIDを持ったオブジェクトであれば、どんなtypeであってもGraph APIを使っていいね出来ると思ってました。

Facebook error 400: OAuthException: (#3) Application does not have the capability to make this API call.

上記は、/PAGE_ID/likesにPOSTしていいねしようとしたときのエラーメッセージ。

You can comment on or like any object that has a /comments or /likes connection by posting to https://graph.facebook.com/OBJECT_ID/comments and https://graph.facebook.com/OBJECT_ID/likes, respectively:

http://developers.facebook.com/docs/reference/api/

ドキュメントを読み返して見たところ、どうもlikesコネクションを持っているオブジェクトだけが、Graph APIでいいねできるオブジェクトっぽい。英文読解あってますかね?

困った。

node.jsでFacebookアプリ開発(2)

若干の進捗があったので記録。

前回、認証用のパッケージを利用するつもりで準備を進めていました。ふと気づいたのですが、そもそもCanvas Page以外での利用を考えないつもりでした。そこで、signed_requestに対応しているのか確認したところ、どうも出来ないような感じ。signed_requestのためだけに大きなパッケージを導入してドキュメントやソースとにらめっこするのもどうかと思い、今回はスクラッチ(という名のコピペ)で対応することに方針転換。

参考にしたのは以下のコード。

上記を参考に、未認可ユーザなら認可をもらい(促し)、認可済ユーザならそのまま利用を許すところの機能を作ったわけですが、これが手間取りました。Canvas Pageのアプリは以前に作ったことがあるのですが、かなり前に一度だけだったのですっかり忘れています。

  • Canvas Pageではアプリケーションをiframeで読み込む
  • iframeでの最初の読み込みはPOSTで行われ、パラメータsigned_requestがついてくる
  • signed_requestは暗号化されており、中には認証情報などが含まれている
    • そのアプリケーションが認可済みなら、user_idとoauth_tokenが含まれているので、それで認可済みか判断できる

というあたりは覚えていました。

  • iframeの中で認可ダイアログのページ(https://www.facebook.com/dialog/oauth)に遷移すると「Facebookに移動」という様なボタンが出て一時停止
    • top.location.hrefを使って遷移させるのが一般的
  • 認可ダイアログからの戻りは、アプリケーションのドメインのURLなのでCanvas Pageから出て行ってしまう
    • 認可成功ならcodeパラメータ、失敗ならerrorパラメータがついてる
    • 今回はCanvas Page以外で使う予定はなかったので、topとwindowが一致したらCanvas Pageに遷移する様にしてしまった
      • Canvas Page移動後にsigined_requestを確認すれば認可済みか分かる

iframe内でLocationヘッダを使ったリダイレクトで認可ダイアログをノンストップで表示させようとしたらブレーキがかかったり、認可後にアプリのページに飛んでしまってどうするのが正規手続きなのか分からず悩んでみたり。眠い頭で大混乱でした。

一通りチュートリアルに書かれているので、ちゃんと読み取る力があれば、自分みたいなことにはならないでしょう。

そんなこんなで、パーミッションを得るだけの入り口部部で相当時間を使ってますよ、っと。

P.S. expressのmiddlewareとして実装したのは案外簡単にやれたんですけどね。

TwitterのAPIで「会話」を得ることはできるのか?

REST API Resourcesを使って一回のリクエストで「会話」を得る方法が分かりません。ドキュメントを読んだ感じ、出来ないというのが今の自分の見解。

任意のツイートに対する返信については、statuses/mentionsの結果をin_reply_to_status_idで絞り込めばとれます。

返信の返信の…という枝葉もとっていこうとすると、どうしたら良いのか分かりません。

Twitterの古いITSに"Conversation API"というタイトルで投稿されているのが見つかりましたが、特に進展はない様子。新しいITSに登録されない限りは進展もないんでしょう。

いったんREST APIの方をあきらめ、Echofonでどうやっているか見てみましたが、これもよく分かりません。Google Analyticsへのリクエスト、普通のREST APIへのリクエスト、userstream.twitter.comへのリクエストは確認できました。

Streaming APIについてはノータッチ出来ていたので、ここに可能性があるのかと思いドキュメントを読んでみました。

By default @replies are only sent from mutual followings. All @replies by followings can be enabled with the replies=all parameter. For example, if Alice follows Bob, but Alice doesn’t follow Carol, by default if Bob @replies Carol, Alice does not see the tweet. The default behavior mimics www.twitter.com and api.twitter.com behavior. If an application wishes to display all @replies, or a filtered subset of @replies, use replies=all.

https://dev.twitter.com/docs/streaming-api/user-streams

返信含めてごっそりとれるという理解で良いんでしょうか?