【 FrickrAPI課題 】 22日目

こんにちはogaです。

今回はFrickrAPIについての記事となります。

基本の記述
Flickr画像の元ページのURLを返す処理とFlickr画像の
altテキストを返す処理は(cat・dog)共通なので変更しない。

ここから
// Flickr画像データのURLを返す
const getFlickrImageURL = (photo, size) => {
 let url = `https://farm${photo.farm}.staticflickr.com/${photo.server}/${photo.id}_${
   photo.secret
 }`;
 if (size) {
   // サイズ指定ありの場合
   url += `_${size}`;
 }
 url += '.jpg';
 return url;
};
// Flickr画像の元ページのURLを返す
const getFlickrPageURL = photo => `https://www.flickr.com/photos/${photo.owner}/${photo.id}`;
// Flickr画像のaltテキストを返す
const getFlickrText = (photo) => {
  text = `"${photo.title}" by ${photo.ownername}`;
ここまで

変数const parameters = $.param{} 

猫の変数はparameterCat
犬の変数はparameterDog

変数parameterCatで定義したあとに、
変数parameterDogを定義する場合

text: 'cat , dog'は記述できない。
text: ’ ’に文字列は一つのみ。


const parametersCat = $.param({
 method: 'flickr.photos.search',
 api_key: apiKey,
 text: 'cat', // 検索テキスト
 sort: 'interestingness-desc', // 興味深さ順
 per_page: 4, // 取得件数
 license: '4', // Creative Commons Attributionのみ
 extras: 'owner_name,license', // 追加で取得する情報
 format: 'json', // レスポンスをJSON形式に
 nojsoncallback: 1, // レスポンスの先頭に関数呼び出しを含めない
});
const url = `https://api.flickr.com/services/rest/?${parameterscat}`;
console.log(url);

FlickrAPIから画像を取得方法は自身のapikeyを使用
※このときの注意点

// Flickr API key
const apiKey = '';
apikeyは2種類ありシークレットapikeyは使用しない
// Flickr画像データのURLを返す
const getFlickrImageURL = (photo, size) => {
 let url = `https://farm${photo.farm}.staticflickr.com/${photo.server}/${photo.id}_${
   photo.secret
 }`;
 if (size) {
   // サイズ指定ありの場合
   url += `_${size}`;
 }
 url += '.jpg';
 return url;
};
// Flickr画像の元ページのURLを返す
const getFlickrPageURL = photo => `https://www.flickr.com/photos/${photo.owner}/${photo.id}`;

// Flickr画像のaltテキストを返す
const getFlickrText = (photo) => {
  text = `"${photo.title}" by ${photo.ownername}`;
 if (photo.license === '4') {
   // Creative Commons Attribution(CC BY)ライセンス
   text += ' / CC BY';
 }
 return text;
};
猫を定義
// リクエストパラメータを作る

const parameterscat = $.param({
 method: 'flickr.photos.search',
 api_key: apiKey,
 text: 'cat', // 検索テキスト
 sort: 'interestingness-desc', // 興味深さ順
 per_page: 4, // 取得件数
 license: '4', // Creative Commons Attributionのみ
 extras: 'owner_name,license', // 追加で取得する情報
 format: 'json', // レスポンスをJSON形式に
 nojsoncallback: 1, // レスポンスの先頭に関数呼び出しを含めない
});
const url = `https://api.flickr.com/services/rest/?${parameterscat}`;
console.log(url);

// 猫の画像を検索して表示

$.getJSON(url, (data) => {
 console.log(data);
 // データが取得できなかった場合
 if (data.stat !== 'ok') {
   console.error('データの取得に失敗しました。');
   return;
 }
 // 空の<div>を作る
 
 const $div = $('<div>');
 // ヒット件数
 $div.append(`<div>${data.photos.total} photos in total</div>`);
 for (let i = 0; i < data.photos.photo.length; i++) {
   const photo = data.photos.photo[i];
   const photoText = getFlickrText(photo);
   // $divに <a href="..." ...><img src="..." ...></a> を追加する
   $div.append(
     $('<a>', {
       href: getFlickrPageURL(photo),
       class: 'd-inline-block',
       target: '_blank', // リンクを新規タブで開く
       'data-toggle': 'tooltip',
       'data-placement': 'bottom',
       title: photoText,
     }).append(
       $('<img>', {
         src: getFlickrImageURL(photo, 'q'),
         width: 150,
         height: 150,
         alt: photoText,
       }),
     ),
     );
 }
 // $divを#mainに追加する
 $div.appendTo('#gallery');
 // BootstrapのTooltipを適用
 $('[data-toggle="tooltip"]').tooltip();
});

ここまで。

dogを定義

※catで定義しているため
const url = `https://api.flickr.com/services/rest/?${parametersCat}`;

dogの場合は下記の記述方法になる
const dogurl = `https://api.flickr.com/services/rest/?${parametersDog}`;
console.log(dogurl);


dogを定義
const parametersDog = $.param({
 method: 'flickr.photos.search',
 api_key: apiKey,
※text: ‘ ’は ‘dog’に変更
 text: 'dog', // 検索テキスト
 sort: 'interestingness-desc', // 興味深さ順
 per_page: 4, // 取得件数
 license: '4', // Creative Commons Attributionのみ
 extras: 'owner_name,license', // 追加で取得する情報
 format: 'json', // レスポンスをJSON形式に
 nojsoncallback: 1, // レスポンスの先頭に関数呼び出しを含めない
});
dogの場合は下記の記述方法になる
const dogurl = `https://api.flickr.com/services/rest/?${parametersDog}`;
console.log(dogurl);
$.getJSON(dogurl, (data) => {
 console.log(data);
 if (data.stat !== 'ok') {
   console.error('データの取得に失敗しました。');
   return;
 }
 const $div = $('<div>');
 $div.append(`<div>${data.photos.total} photos in total</div>`);
 for (let i = 0; i < data.photos.photo.length; i++) {
   const photo = data.photos.photo[i];
   const photoText = getFlickrText(photo);
   $div.append(
     $('<a>', {
       href: getFlickrPageURL(photo),
       class: 'd-inline-block',
       target: '_blank',
       'data-toggle': 'tooltip',
       'data-placement': 'bottom',
       title: photoText,
     }).append(
       $('<img>', {
         src: getFlickrImageURL(photo, 'q'),
         width: 150,
         height: 150,
         alt: photoText,
       }),
     ),
     );
 }
 $div.appendTo('#gallery');
 $('[data-toggle="tooltip"]').tooltip();
});

この記事が気に入ったらサポートをしてみませんか?