logo
home > web > Perl

Perlの最近のブログ記事

TwitterのAPI仕様変更によりHTTPでのアクセスができなくなったのでその時の対応をメモ

CPANモジュールのNet::Twitterが対応していなかったので
直接ファイルを書き変えた。
サーバのCPANモジュールの以下のファイルの
14行目辺りをhttpsへ変更
~/Net/Twitter/Role/API/RESTv1_1.pm

#has apiurl => ( isa => 'Str', is => 'ro', default => 'http://api.twitter.com/1.1' );
has apiurl => ( isa => 'Str', is => 'ro', default => 'https://api.twitter.com/1.1' );

これで問題なく動作した。
どうやら2月6日のアップデートでアプリ認証用のアクセスURLに渡すパラメータ名が変更になった模様。

認証ページ遷移後に下記のエラーが出ていたら待っていても
エラーのままです。
fb_error.png


○変更パラメータ
app_id → client_id
next → redirect_uri


下記の感じでFacebook::Graphを使用してURL生成してたら
生成後の上記パラメータを置換してあげましょう。。

my $fg = Facebook::Graph->new(
        postback => Postback,
        app_id   => APP_ID,
        secret   => SECRET
    );

    my $get_code_url = $fg->authorize->extend_permissions(PERMISSIONS)->uri_as_string;




#perl -MCPAN -e shell
>install ~

でモジュールをインストールしようとしたけど、何やら下記のエラーが

LWP failed with code[500] message[LWP::Protocol::MyFTP: connect:timeout]

>o conf urllist
で表示されるURLからダウンロードできないらしいので下記でURL追加

>o conf urllist unshift ftp://ftp.ring.gr.jp/pub/lang/perl/CPAN/

んで追加されたか確認
>o conf urllist

もっかいインストール
>install ~

できたー!
Facebookページにperlで自動投稿してみたのでその時のメモ。
まずはfacebookとのやり取りをひも解いてみた。これをPHPやPerlにすればよし
いくつかはまったところがあったのでメモ。


1.Facebookアプリの登録
まずはアプリ登録。

Developers.png

右の『Set Up New App』から新規登録しましょう。

適当に埋めてサイトURLとドメインだけ今回アクセスするサーバのものにしておきましょう。
あとで指定したcallbackURLが同じドメインでないと怒られます。

2.png
アプリIDとアプリの秘訣(?)を控えましょう。


2.OAuth認証でcode取得
次にOAuth認証するため下記のURLに情報を一緒に投げてみましょう。
こんな感じでアクセス。

https://graph.facebook.com/oauth/authorize?client_id=アプリID&redirect_uri=登録したドメインの適当なコールバックURL&scope=offline_access,publish_stream,user_status,read_stream,status_update,manage_pages

scopeは下記のアプリ承認時に出る権限です。
manage_pagesがユーザの管理してるページに自由にアクセスできる権限かな。
これがあればユーザに紐づいたFacebookページにアクセスできる。

re.png


コールバックURL?code=1234567891234567

こんな感じでコールバックURLにcodeが帰ってくるので
codeをメモ。


3.ユーザのアクセストークンを取得
次はcodeを使ってユーザのアクセストークンを取得します。
このトークンを使えば、ユーザに紐づいた情報が取得できます。
下記にアクセス。

https://graph.facebook.com/oauth/access_token?
     client_id=アプリID&redirect_uri=コールバックURL&
     client_secret=アプリの秘訣&code=さっきのコード

そうすると
コールバックURL?access_token=ユーザアクセストークン

とかえってくるのでメモ。

4.Facebookページのアクセストークンを取得
最後にユーザのアクセストークンを使って該当するFacebookページのアクセストークンを取得します。
これがあれば外部からFacebookページへの投稿が可能に!

https://graph.facebook.com/me/accounts?access_token=ユーザアクセストークン

これにアクセスすると下記のようにJSON形式でユーザに紐づいたFacebookページやらアプリやらの
idとaccess_tokenがでます。

json.png
Categoryが『Community』となっているものがFacebookページなので、そのaccess_tokenをメモ
投稿したいFacebookページのURLの数字を確認しておきましょう。FacebookページのURLに含まれてる数字がIDなので。


5.投稿
あとは下記のようにメモったFacebookページのaccess_tokenをメッセージと一緒にポストしてみよう

<form action="https://graph.facebook.com/FacebookページのID/feed" method="post">
    <input type="hidden" name="access_token" value="アクセストークン" />
    <input type="hidden" name="picture" value="http://marooon.com/img/logo.gif'" />
    <input type="text" name="message" value="hogehoge" />
</form>
こんなかんじ。

試しにポストしてみたらちゃんと投稿されました。
画像を投稿したい場合はpictureで画像のURLを投げてやればOK

あとはこの流れをプログラムに!



cpanたたいてモジュールを入れる時、依存関係にあるモジュールをインストールしますか? って聞かれる。Enterを押すのが面倒ですよね。

下記設定で全部yesで進んでくれます。

cpan> o conf prerequisites_policy follow
cpan> o conf commit

以上。
JavaScript Journal | JavaScript総合情報サイト

このアーカイブについて

このページには、過去に書かれたブログ記事のうちPerlカテゴリに属しているものが含まれています。

前のカテゴリはopenframeworksです。

次のカテゴリはpluginです。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。