Creazy!

WEBエンジニア・ヤガーのテック・ガジェットブログ

JavaScript jQuery 小技集

PinterestをAPI化するYahoo!PipesとjQueryブログパーツサンプル

投稿日:


pinterest-0001
最近、TwitterやFacebookのタイムラインでPinterestの名前を目にすることが多くなり、とりあえずアカウント作って試してみました。
Takahito Yagami (takahitoyagami) on Pinterest
「オンライン上にピンボードを作る」事ができるWEBサービスで、Instagramの様に写真をアップロードでき、Tumblrのように他サイトから画像を引用でき、SNS的な機能も携えてRepinやLike・コメントでのコミュニケーションを図れます。Boardと呼ばれるカテゴリーを複数作成でき、画像のタイプごとにPinする先を選択しながらアップロードします。なにより美しいUIが素晴らしく、見ていて楽しいのでハマる人が続出しているそうで(海外ではすでに一定の地位を得ているようですね)。
個人的にはどハマりするほどの衝撃では無かったのですが、大好きなジャンルである画像系サービスですし、複数のBoardに画像を整理していくという特徴を何かうまく使えないかと考えている途中です。こういうソーシャルメディア系サービスが流行りだすと、ビジネス特にマーケティング分野で使ってやろうという企業が鼻息荒く動き出しているころかと思いますが、とりあえずブロガー目線でブログパーツとして自分のサイトに組み込む方法を考えてみました。

PinterestをAPI化するYahoo!Pipes

さて、Pinterestにはユーザー毎のRSSフィードはあったのですが、公式のAPIが見当たりません(どっかにあるのかな、見つけた人教えて)。特に、複数のBoardを持つことができるので、データ取得系のAPIには色々要望があるのですが、そもそもないとは・・・。
というわけで、久しぶりにPipesを使ってAPI化です。
pinterest-0002
Pipes: Pinterest
JSON(P)での呼び出し例は下記の通りです。

http://pipes.yahoo.com/pipes/pipe.run?_id=0074c6376f98ef2a01cb8b80568cf569
&_render=json
&username=takahitoyagami
&target=pins
&_callback=callback
※便宜上改行していますが、実際は改行、スペースはなしで

リクエストパラメータ

username(必須)
アカウント名
target(省略可/デフォルトpins)
pins(ユーザーの全写真)か、boardの名前(url)
_callback(省略可)
コールバック関数名

レスポンスサンプル

{
count: 19,
value: {
title: "Pinterest",
description: "Feeds data from pinterest users pins or board pins.",
link: "http://pipes.yahoo.com/pipes/pipe.info?_id=0074c6376f98ef2a01cb8b80568cf569",
pubDate: "Sat, 04 Feb 2012 09:33:34 +0000",
generator: "http://pipes.yahoo.com/pipes/",
callback: "",
items: [
{
guid: "52635889364740042",      // Pin ID
y:id: {
value: "52635889364740042"  // Pin ID
},
author: "takahitoyagami",       // ユーザーID
title: "画像の説明",
y:title: "画像の説明",
description: "",                // フィード用画像と説明
pubDate: "1970-01-01 00:00:00", // ダミー日付
y:published: null,
link: "http://pinterest.com/pin/52635889364740042/", // Pin Permalink
media:thumbnail: {
url: "http://正方形サムネイル.jpg"
},
imgs: {
square: "http://正方形サムネイル.jpg",
small: "http://横幅192pxの小さめサイズ.jpg",
large: "http://横幅553pxの大きめサイズ.jpg",
m600: "http://長辺600pxの大きめサイズ.jpg"
}
},
:
:

§

Type1: Pinterestの写真を小さなサムネイルで組み込むjQueryサンプル

pinterest-0003
Pinterestのユーザーページは、複数のBoardにそれぞれ正方形のサムネイルが並ぶデザインになっています。1つのBoardには9つの正方形サムネイルが並びますが、同じようなフォーマットで、ブログのサイドバーなどに設置するとそれらしくなりそうです。

<!-- このdivに取得した画像を挿入します -->
<div id="#tiles1"></div>
<script type="text/javascript">
$.ajax({
type: "GET",
url: "http://pipes.yahoo.com/pipes/pipe.run?_id=0074c6376f98ef2a01cb8b80568cf569&_render=json"
+"&username=takahitoyagami&target=pins",
dataType: "jsonp",
jsonp: "_callback",
success: function( json ) {
var items = json.value.items;
for ( var i=0; i<items.length; i++ ) {
item = items[i]
$('#tiles1').append(
'<a href="'+item['link']+'" title="'+item['title']+'"><img src="'+item['imgs']['square']+'" alt="'+item['title']+'" /></a>'
);
if ( i+1 >= 12 ) break; // max 12pics
}
}
});
</script>

上のPipesでは特定のBoardを指定してデータを取得することもできるので、複数のBoardを並べたりもできますね。

Type2: Pinterestの写真を小さなストリームで組み込むjQueryサンプル

pinterest-0004
Pinterestではグリッド型のデザインが特徴的ですが、Twitter/Facebookでは縦一列に情報が流れていくストリーム型になっているので、いまだに慣れない部分もあります。ブログのサイドバーなどに設置する場合はスペースも限られていますし、横幅が決まっている画像サイズがあるので、小さめの画像を使って立てにスクロールできるパーツを作ってみます。

<!-- このdivに取得した画像を挿入します -->
<div id="#ministream"></div>
<script type="text/javascript">
$.ajax({
type: "GET",
url: "http://pipes.yahoo.com/pipes/pipe.run?_id=0074c6376f98ef2a01cb8b80568cf569&_render=json"
+"&username=takahitoyagami&target=pins",
dataType: "jsonp",
jsonp: "_callback",
success: function( json ) {
//console.log( json );
var items = json.value.items;
for ( var i=0; i<items.length; i++ ) {
item = items[i]
$('#ministream').append(
'<a href="'+item['link']+'" title="'+item['title']+'"><img src="'+item['imgs']['small']+'" alt="'+item['title']+'" /></a>'
);
}
}
});
</script>

§

Type3: Pinterestの写真をTumblrのDashboardのように表示するjQueryサンプル

pinterest-0005
最後に、ブログパーツというには大きすぎるのですが実験的に大きな画像を立てに一覧するサンプルも作りました。

<!-- このdivに取得した画像を挿入します -->
<div id="#stream"></div>
<script type="text/javascript">
$.ajax({
type: "GET",
url: "http://pipes.yahoo.com/pipes/pipe.run?_id=0074c6376f98ef2a01cb8b80568cf569&_render=json"
+"&username=takahitoyagami&target=pins",
dataType: "jsonp",
jsonp: "_callback",
success: function( json ) {
//console.log( json );
var items = json.value.items;
for ( var i=0; i<items.length; i++ ) {
item = items[i]
$('#stream').append(
'<a href="'+item['link']+'" title="'+item['title']+'"><img src="'+item['imgs']['large']+'" alt="'+item['title']+'" /></a>'
);
}
}
});
</script>

ページネーションなどの機能までは考えていないので、Pinterestクライアントという使い方までは至っていませんが、やっぱり大きな画像を連続で見れたほうが効率はいいような気がしています。うーん、これはTumblr脳なのかな…。

まとめ

今回のサンプルが動く状態でみれるページを用意していますので、実際のコードはそちらを参考にしてください。最低限のCSSも適用しています。
Pinterest Widget Sample
※当たり前ですが、jQueryを前提にサンプル書きましたので、jQuery本体の読み込みなどはしておいて下さい。あと、特定のアカウント・Boardの情報を取得する場合は、赤字部分のusername,targetパラメータの書き換えも忘れずに。

-JavaScript, jQuery, 小技集

執筆者:

関連記事

Googleドキュメントのフォーム機能からGoogle Apps Scriptを使ってメール送信

【2014/12/26:追記】 この記事はGoogleの仕様変更などで内容が古くなっていたため、最新の情報で書き換えました。 リンク先の記事を参照してください。 Googleドライブのフォーム機能から …

FlickrExがWordPressのLazy Load Pluginに対応しました!

先月このブログにも導入し、Lazy Loadとの共存のための修正などで協力させていただいたFlickrExですが、どうもWordPressでうまくいかないという声が聞こえてきていたので、なんとなくやり …

Facebookの「Recommendations Bar」が端っこから微妙にズレる件の修正方法

Facebookソーシャルプラグインの1つRecommendations Barは、ソーシャルグラフを解析し見ているページに関連するオススメページをブラウザ画面の端っこに表示してくれる機能を持っている …

no image

ブログデザインをリニューアルしました!これからはCreazy!

1年以上も寝かし続け、いっそなかった事にしようと思っていたリニューアルをついに公開しました! 4回に渡って実施されたブログデザイン勉強会の後押しもあり、途中脳内が血みどろになるほど苦労してここまでこぎ …

no image

第9回:閲覧しているサイトへのリンクタグを生成するブックマークレット

どうしてもっと早く気がつかなかったんだろう、と思うくらい便利なブックマークレットを思い付きました。既出かもしれないけど、公開しておきます。 ブログを書いていると、他のブログのエントリーへのリンクを貼っ …

スポンサードリンク

スポンサードリンク