リストを調べるAPIを使ってみた

ユーザ(作成したor入っている)のリストを取得し、リストに含まれるユーザを出力する。ある数以上の人数が含まれている場合previous_cursorやnext_cursorを使用する必要があるみたいです。slugはユーザ名と組み合わせて用いることでリストを特定するために必要。

#!/usr/perl

use Net::Twitter;

use warnings;
use strict;

binmode(STDOUT, ":utf8");

my $user = 'twitter_user';
my $password = 'twitter_password';

my $nt = Net::Twitter->new(
                           traits   => [qw/API::Lists/],
                           username => $user,
                           password => $password
                           );

# list_userはscreen_nameと同じ(http://twitter.com/の後ろの部分)
# list_lists : 自分が作ったリストを取得
# list_memberships : 自分が加えられているリストを取得
my $lists = $nt->list_lists({user => 'list_user'});

for my $list (@$lists) {
    print "list name: $list->{name}\n"
        . "list_members\n";
    my $users = $nt->list_members({
        user => $list->{user}{screen_name},
        slug => $list->{slug}
    })->{users};
    
    for my $user (@$users) {
        print $user->{screen_name} . "\n";
    }
}

自分のフォロワーのフォロワーを取得するサンプル

自分のfollowerを取得し、取得したfollowerのfollowerを取得するサンプル。
CPANのNet::Twitterを使用しています。
http://search.cpan.org/dist/Net-Twitter/

#!/usr/perl

use Net::Twitter;

use warnings;
use strict;

binmode(STDOUT, ":utf8");

my $user = 'twitter_username';
my $password = 'twitter_passowrd';

my $nt = Net::Twitter->new(
                           traits   => [qw/API::REST/],
                           username => $user,
                           password => $password
                           );

my $followers = $nt->followers;
for my $follower ( @$followers ) {
    my $id = $follower->{id};
    my $user_id = $follower->{status}{id};
    my $screen_name = $follower->{screen_name};
    # cursor はフォロワーの数が一定数以上のときにページングするために必要?
    my $cursor = -1;

    # followingはfollowersをfriends(following)に変えて実行可能。
    my $in_followers = $nt->followers({
                                     id => $id,
                                     user_id => $user_id,
                                     screen_name => $screen_name,
                                     cursor => $cursor
                                     });

    my $users = $in_followers->{users};

    for my $in_follower ( @$users ) {
        print "$in_follower->{screen_name} ";
    }
    print "\n";
}

ArraysとCollectionsでソート

Arrays.sortを使ったソートとCollections.sortを使ったソート


Main.java

package test;

import java.util.*;

public class Main {
	public static void sort(Point p[]) {
		Arrays.sort(p, new test.Point.PointComparator());
	}
	public static void print(Point p[]) {
		for (int i = 0;i < p.length; i++) {
			System.out.printf("(x:%d,y:%d)", p[i].x, p[i].y);
		}
	}
	public static int binary_search(Point p_array[], Point p) {
		return Arrays.binarySearch(p_array, p, new test.Point.PointComparator());
	}
	
	public static void sort(ArrayList<Point> p) {
		Collections.sort(p, new test.Point.PointComparator());
	}
	public static void print(ArrayList<Point> p) {
		for (int i = 0;i < p.size(); i++) {
			System.out.printf("(x:%d,y:%d)", p.get(i).x, p.get(i).y);
		}
	}
	public static int binary_search(ArrayList<Point> p_array, Point p) {
		return Collections.binarySearch(p_array, p, new test.Point.PointComparator());
	}
	
	public static void main(String[] args) {
		Point[] p1 = new Point[]{
			new Point(1,2),
			new Point(6,5),
			new Point(3,3),
			new Point(3,4)
		};
		java.util.ArrayList<Point> p2 = new java.util.ArrayList<Point>(Arrays.asList(p1));
		
		System.out.print("p1ソート前");
		print(p1);
		sort(p1);
		System.out.print("\np1ソート後");
		print(p1);
		System.out.println("\np1バイナリーサーチ");
		System.out.println(binary_search(p1, new Point(3,3)));
		System.out.println(binary_search(p1, new Point(1,1)));
		
		System.out.print("p2ソート前");
		print(p2);
		sort(p2);
		System.out.print("\np2ソート後");
		print(p2);
		System.out.println("\np2バイナリーサーチ");
		System.out.println(binary_search(p2, new Point(3,3)));
		System.out.println(binary_search(p2, new Point(1,1)));
	}
}

Point.java

package test;

import java.util.Comparator;

public class Point {
	int x, y;
	public Point(int x, int y) {
		this.x = x; this.y = y;	
	}
	public static class PointComparator implements Comparator<Point> {
		public int compare(Point p1, Point p2) {
			if (p1.x != p2.x) return p1.x - p2.x;
			else return p2.y - p1.y;
		}
	}
}

実行結果

p1ソート前(x:1,y:2)(x:6,y:5)(x:3,y:3)(x:3,y:4)
p1ソート後(x:1,y:2)(x:3,y:4)(x:3,y:3)(x:6,y:5)
p1バイナリーサーチ
2
-2
p2ソート前(x:1,y:2)(x:6,y:5)(x:3,y:3)(x:3,y:4)
p2ソート後(x:1,y:2)(x:3,y:4)(x:3,y:3)(x:6,y:5)
p2バイナリーサーチ
2
-2