4時間の格闘から戻ったPerl初心者のまめこです。えいやっ!
WebService::Simpleを使ってFlickrのタイトルを取得してみました。
12時から始めて今やっと動いた・・・。ぜーはーぜーはー。
コードはこちら。
#!/usr/local/bin/perl
use strict;
use Encode;
use WebService::Simple;
use Perl6::Say;
use Data::Dumper;
my $apikey = $ARGV[0] || "you apikey";
my $user = "userid"; #スクリーンネームじゃない方。73611000\@N00とか。
my $flickr = WebService::Simple->new(
base_url => "http://api.flickr.com/services/",
param => { apikey => $apikey, }
);
my $response = $flickr->get(
'feeds/photos_public.gne',{id=>$user}
);
my $ref = $response->parse_response;
foreach my $key ( keys %{ $ref->{entry} } ){
my $item = $ref->{entry}{$key};
say $item->{title};
}
苦戦の歴史
苦戦したのは全部。
ユーザーの指定が出来ずphotos_publicの新着ばかり表示させてました。正解はこうだったのね(´・ω・`)ハッシュリファレンスというらしいです。
'feeds/photos_public.gne',{id=>$user}
をずっと
'feeds/photos_public.gne',id=>$user,
て書いてました。教えてくれたyusukebeさんありがとう!
foreach内のあたりが一番の苦戦どころでtomyheroに教えてもらいました。ありがたやー!
foreach my $key ( keys %{ $ref->{entry} } ){
keysが何かは良く分かってません。これから覚えるよ!$xx->{xxx}の方はなんとなく覚えました!
titleを表示させたかったのにずっとcontentを表示させてて、ダンプして格納されている内容を何度も読んでやっとこ指定先すら違うことが判明。
動いたので泣きました。祝福してくれた方ありがとう!(´;ω;`)
追記 080601 15:55
otsuneさんがコメント&はてブコメントで教えてくれた方法で書いたらもっとスマートになりました!
my $user = "userid"; #まめの
my $user = q{userid}; #直した方
これだと引数に@とか入っててもエスケープしなくて済むんですね!
foreach my $key ( keys %{ $ref->{entry} } ){
my $item = $ref->{entry}{$key};
say $item->{title};
}
はkeysじゃなくてveluesを使うと1行短くなりました。
foreach my $item ( values %{ $ref->{entry} } ){
say $item->{title};
}
valuesはどこから?と思ったのだけれど、ダンプするとvaluesってところに格納されてるから「values」の中のごにょごにょ。という書き方をしているのかなーと予測してみる。
otsuneさんありがとうござまーす!
余談
- 03:37 (woopsdez) ねむい・・・
- 03:37 (woopsdez) けど
- 03:37 (woopsdez) あと少しだから・・・
- 03:37 (woopsdez) が ば る
- 03:38 がんばれ~~
- 03:38 (woopsdez) (´;ω;`)
- 03:38 (woopsdez) ありがとう!
- 03:38 タイトルもってくるの?
- 03:38 (woopsdez) そうなのれす
- 03:38 タイトル好きだなw
- 03:38 (woopsdez) www
- 03:38 (woopsdez) 大好き!
- 03:38 意味わからねぇw
- 03:38 wwww
- 03:38 www
- 03:38 w
タイトルばかり取得していたらIRCでこんな流れになったのでまめこは今日限りタイトルを卒業します。あおーげーばー♪とーおーとしーぃ。
次はFlickrで検索して写真を表示させるらしいですよ! CGIですって!
でも、それはまた次のお話・・・。



foreach my $key ( keys %{ $ref->{entry} } ){
my $item = $ref->{entry}{$key};
say $item->{title};
}
は
for my $item (value %{ $ref->{entry} }) {
say $item->{title};
}
で良くね?
コメントtypoしてた
s/value/values/
おおおお! otsuneさんの教えてくれた方法で動きました!
追記しときます!