instagram さんについて軽く調べたのでメモ。

  • ユーザブロック機能とか、スパムユーザの報告機能があったのに気づいてなかった。アプリだと、ユーザの画面開いて右上の歯車っぽいアイコンから。
  • 公開状態の切り替え機能があるけど、api でユーザのデータとってきても、その中に公開状態のデータがない。
  • 公開状態は /users/{hoge さんの id}/relationships でとれる。
  • target_user_is_private の値が 1 だったらプライベート、空文字だったら公開。
  • 自分がプライベートかどうかは /users/self から自分の id を取得してから、/users/{自分のid}/relationships から取れる。
  • /users/self/relationship みたいなのはなかった。めんどくさい。(あっても変わらない気がするけど。あったらあったで URL、それどうなのという感じするけど。)

instagram で遊んだスクリプトがこれ。

#!/usr/bin/perl
use strict;
use warnings;

use Config::Pit;
use LWP::UserAgent;
use HTTP::Cookies;
use URI;
use URI::QueryParam;
use JSON::Syck;

my $config = pit_get('aerith.instagr.am', require => {
    username => 'your username',
    password => 'your password',
    access_token => 'your token on instagram'
});

my $api_base = 'https://api.instagram.com/v1';
my $api_path = shift || '/users/self/feed';

my $agent = LWP::UserAgent->new();
$agent->cookie_jar(HTTP::Cookies->new);

my $login_uri = URI->new('https://instagram.com/accounts/login/');
my $login = $agent->post($login_uri, {
    username => $config->{username},
    password => $config->{password},
});

if ($login->is_redirect && $login->content eq '') {
    my $endpoint = URI->new($api_base.$api_path);
    $endpoint->query_param_append(access_token => $config->{access_token});

    my $request = $agent->get($endpoint);

    print YAML::Syck::Dump(JSON::Syck::Load($request->content));
} else {
    print "Authentication failed.";
}

exit;

__DATA__

アクセストークン取得はまた別の話。