メモログ

塵が積もって山とならないメモのログ

ThickBox対応したFlickrのAction Streamを作成する

Action Streamで得たFlickrのActivityをThickBoxを利用して表示したいなと思いたち、そこで独自のAction Streamsプラグインを作成するのページと、既存のAction Stream pluginとGoogle検索などを見ながら、自分用のFlickr for thickbox pluginを作成してみました。

作成したconfig.yaml(action_streams部分のみ)はこんな感じ。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
action_streams:
flickrthickbox:
photos:
name: Photos
description: Photos you posted
fields:
- thumbnail_b
html_form: '<a href="[_2]" class="thickbox"><img src="[_3]" title="[_4]"></a> on <a href="[_5]">Flickr</a>'
html_params:
- thumbnail_b
- thumbnail
- title
- url
url: 'http://www.flickr.com/photos/{{ident}}/'
identifier: url
scraper:
foreach: 'p.Photo'
get:
title:
- a
- '@title'
url:
- a
- '@href'
thumbnail:
- img
- '@src'
thumbnail_b:
- img
- '@src'

callbacks:
pre_build_action_streams_event.flickrthickbox_photos: sub { $_[2]->{thumbnail_b} =~ s/_m\.jpg/_b\.jpg/ }


scraperで行ったのは、thickbox 実行時に表示するための大きな画像(thumbnail_b)のURLを取得するために ‘thumbnail_b’=> [‘@src’,sub { s/_m\.jpg/_b\.jpg/}] みたいなことをやろうとしてのことだったのですが、Action Stream のplugin上ではうまく動かず・・。結局、callbacksで置換するようにしました。scraperでやる必然性は特になく、atomでもrssでも同じことはできそう。

そして実際に表示させてみたのですが、思ったより収まりが悪い。外観についてはまたそのうち考えてみよう・・

そして追記。

やはりatomから取得する方法変えてみました。あとストリームの名前を「flickr」にして、既存のflickrストリームを上書きするかたちにしました(それに伴ってfavoritesも一応追加)。pluginを追加する前のflickrのストリームには「thumbnail_b」がないので、リンクをクリックしても何も表示されないのが難点。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
action_streams:
flickr:
favorites:
name: Favorites
description: Photos you marked as favorites
fields:
- by
html_form: '[_1] saved <a href="[_2]">[_3]</a> as a favorite photo'
html_params:
- url
- title
url: 'http://api.flickr.com/services/feeds/photos_faves.gne?nsid={{ident}}&lang=en-us&format=atom_10'
atom:
thumbnail: content
by: author/name
photos:
name: Photos
description: Photos you posted
fields:
- thumbnail_b
html_form: '<a href="[_2]" class="thickbox"><img src="[_3]" title="[_4]"></a> on <a href="[_5]">Flickr</a>'
html_params:
- thumbnail_b
- thumbnail
- title
- url
url: 'http://api.flickr.com/services/feeds/photos_public.gne?id={{ident}}&lang=en-us&format=atom_10'
identifier: url
atom:
thumbnail: content

callbacks:
pre_build_action_streams_event.flickr_photos: $ActionStreams::ActionStreams::Fix::flickr_photo_thumbnail
pre_build_action_streams_event.flickr_photos: sub { $_[2]->{thumbnail_b} = $_[2]->{thumbnail}; $_[2]-> {thumbnail_b} =~ s/_t\.jpg/_b\.jpg/ }
pre_build_action_streams_event.flickr_favorites: $ActionStreams::ActionStreams::Fix::flickr_photo_thumbnail