GIFMAGAZINE APIをJavaScript/Node.jsで叩いてみた
はじめに
プログラミングの授業で「Web APIを使ってWebサービスを作ろう」という課題が出たためいろいろとWeb APIを探していたときにこの「Gifmagazine-API」見つけました。ただリファレンスを読むとサンプルコードが書いていなかったためこの記事でJavaScriptとNode.jsでのサンプルコードを書きます。(JavaScriptにはjQueryライブラリを使いました)
GIFMAGAZINE APIとは?
サンプルコードの前に「GIFMAGAZINE API」とは何なのか説明します。 「GIFMAGAZINE」とはgif画像を投稿したり登校されたgif画像をダウンロードすることができるgif画像の投稿・共有サービスです。このAPIでは「GIFMAGAZINE」内のgif画像を検索することができます。 このAPIのおもしろいところは感情別でgif画像を検索できるところです。感情は標準化されたユニコード絵文字を元に対応しています。 また特徴として、id検索以外はAPIキーなしで利用できるところが挙げられます。ただしこの「GIFMAGAZINE」から提供されたデータを使用する際は以下のような決まりがあるの注意してください。(詳しくは http://api.gifmagazine.net/ )
URL:http://gifmagazine.net/
クレジット:http://sinkr.main.jp/api/brand_logo_kit.zip
サンプルコード
ここからはGifmagazine-API-Documentationに書かれているAPIの説明を引用しながら、それを参考に書いたサンプルコードを書いていきます。
JavaScriptの場合はjQueryを使用するのでhtmlの<head>タグの中に次のタグを入れてください。
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
文字検索
名前の通り文字で検索します。
パラメータ
- q(必須) : 検索したい単語
- limit : 返ってくる検索結果の件数。デフォルトは2件。最大2件。0~2以外の数値を指定した場合はデフォルト値が利用されます。
- offset : オフセット。デフォルトは0。最大0。
- safe : 0を指定するとR-18のgifを検索結果から除く。1を指定するとR-18のgifも含んだ検索結果を返す。デフォルトは0。
Request
var query = '猫'; var limit = 1; var offset = 0; var safe = 0; var URL = 'http://api.gifmagazine.net/v1/gifs/search?q=' + query + '&limit=' + limit + '&offset' + offset + '&safe=' + safe; $.getJSON(URL, function (response) { console.log(response); })
Node.js
const request = require('request'); var URL = 'http://api.gifmagazine.net/v1/gifs/search'; request.get({ url: URL, headers: {'Content-type': 'application/json'}, qs: { q:"猫", limit:2, offset:0, safe:0 }, json: true }, function(err, req, json){ console.log(json); });
Response
{ "data": [ { "id": 4003, "url": "http://gifmagazine.net/post_images/4003", "title": "いけー!", "description": "#cat #猫 cat 猫", "user_name": "berururunnnnnnn", "file_size": 2525252, "rate": "g", "image": { "default": { "url": "http://img.gifmagazine.net/gifmagazine/images/4003/original.gif", "width": 500, "height": 400 }, "medium": { "url": "http://img.gifmagazine.net/gifmagazine/images/4003/medium.gif", "width": 300, "height": 240 }, "small": { "url": "http://img.gifmagazine.net/gifmagazine/images/4003/small.gif", "width": 140, "height": 112 } }, "video": { "default": { "url": "http://img.gifmagazine.net/gifmagazine/images/4003/original.mp4", "width": 500, "height": 400 }, "medium": { "url": "http://img.gifmagazine.net/gifmagazine/images/4003/medium.mp4", "width": 300, "height": 240 } }, "tags": [ "猫" ] }, ], "pagination": { "total_count": 1, "count": 1, "offset": 0 } }
感情検索
感情を表した絵文字に対応する名前で検索します。
パラメータ
- q(必須) : 各種絵文字に対応するName(詳細は現在対応済みの絵文字を参照)
- limit : 返ってくる検索結果の件数。デフォルトは2件。最大2件。0~2以外の数値を指定した場合はデフォルト値が利用されます。
- offset : オフセット。デフォルトは0。最大0。
- safe : 0を指定するとR-18のgifを検索結果から除く。1を指定するとR-18のgifも含んだ検索結果を返す。デフォルトは0。
現在対応済みの絵文字(2017/12/03現在)
| Emoji | Name |
|---|---|
| 😁 | grin |
| 😂 | joy |
| 😃 | smiley |
| 😄 | smile |
| 😅 | sweat_smile |
| 😆 | satisfied |
| 😉 | wink |
| 😊 | blush |
| 😋 | yum |
| 😌 | relieved |
| 😍 | heart_eyes |
| 😏 | smirk |
| 😒 | unamused |
| 😓 | sweat |
| 😔 | pensive |
| 😖 | confounded |
| 😘 | kissing_heart |
| 😚 | kissing_closed_eyes |
| 😜 | stuck_out_tongue_winking_eye |
| 😝 | stuck_out_tongue_closed_eyes |
| 😞 | disappointed |
| 😠 | angry |
| 😡 | rage |
| 😢 | cry |
| 😣 | persevere |
| 😤 | triumph |
| 😥 | disappointed_relieved |
| 😨 | fearful |
| 😩 | weary |
| 😪 | sleepy |
| 😫 | tired_face |
| 😭 | sob |
| 😰 | cold_sweat |
| 😱 | scream |
| 😲 | astonished |
| 😳 | flushed |
| 😵 | dizzy_face |
| 😷 | mask |
Request
var query = 'yum'; var limit = 1; var offset = 0; var safe = 0; var URL = 'http://api.gifmagazine.net/v1/gifs/emotion?q=' + query + '&limit=' + limit + '&offset' + offset + '&safe=' + safe; $.getJSON(URL, function (response) { console.log(response); })
Node.js
const request = require('request'); var URL = 'http://api.gifmagazine.net/v1/gifs/emotion'; request.get({ url: URL, headers: {'Content-type': 'application/json'}, qs: { q:"yum", limit:1, offset:0, safe:0 }, json: true }, function(err, req, json){ console.log(json);//返ってきたjson });
Response
{ "data": [ { "id": 727127, "url": "http://gifmagazine.net/post_images/727127", "title": "face savouring delicious food[9-6]", "description": "face savouring delicious food[9-6]", "user_name": "Mr.emotion", "file_size": 1191679, "rate": "g", "image": { "default": { "url": "http://img.gifmagazine.net/gifmagazine/images/727127/original.gif", "width": 393, "height": 200 }, "medium": { "url": "http://img.gifmagazine.net/gifmagazine/images/727127/medium.gif", "width": 300, "height": 153 }, "small": { "url": "http://img.gifmagazine.net/gifmagazine/images/4003/small.gif", "width": 140, "height": 112 } }, "video": { "default": { "url": "http://img.gifmagazine.net/gifmagazine/images/4003/original.mp4", "width": 500, "height": 400 }, "medium": { "url": "http://img.gifmagazine.net/gifmagazine/images/4003/medium.mp4", "width": 300, "height": 240 } }, "tags": [ "猫" ] }, ], "pagination": { "total_count": 10, "count": 2, "offset": 0 } }
pickup , topic , jumble
pickup : Pickup Gifに選ばれた投稿の新着フィードを返す topic : 今web上で話題のGIFの新着フィードを返す jumble : pickupとtopicを混ぜたgifのフィードを返す
パラメータ
- limit : 返ってくる検索結果の件数。デフォルトは2件。最大2件。0~2以外の数値を指定した場合はデフォルト値が利用されます。
- offset : オフセット。デフォルトは0。最大0。
Request
var feed = 'pickup';//topic , jumble var limit = 1; var offset = 0; var safe = 0; var URL = 'http://api.gifmagazine.net/v1/feeds/' + feed + '?limit=' + limit + '&offset' + offset + '&safe=' + safe; $.getJSON(URL, function (response) { console.log(response); })
Node.js
const request = require('request'); var URL = 'http://api.gifmagazine.net/v1/feeds/'; var feed = 'pickup';//topic , jumble request.get({ url: URL + feed, headers: {'Content-type': 'application/json'}, qs: { limit:1, offset:0, safe:0 }, json: true }, function(err, req, json){ console.log(json); });
Response
pickup
{ "data": [ { "id": 4003, "url": "http://gifmagazine.net/post_images/4003", "title": "いけー!", "description": "#cat #猫 cat 猫", "user_name": "berururunnnnnnn", "file_size": 2525252, "rate": "g", "image": { "default": { "url": "http://img.gifmagazine.net/gifmagazine/images/4003/original.gif", "width": 500, "height": 400 }, "medium": { "url": "http://img.gifmagazine.net/gifmagazine/images/4003/medium.gif", "width": 300, "height": 240 }, "small": { "url": "http://img.gifmagazine.net/gifmagazine/images/4003/small.gif", "width": 140, "height": 112 } }, "video": { "default": { "url": "http://img.gifmagazine.net/gifmagazine/images/4003/original.mp4", "width": 500, "height": 400 }, "medium": { "url": "http://img.gifmagazine.net/gifmagazine/images/4003/medium.mp4", "width": 300, "height": 240 } }, "tags": [ "猫" ] } ], "pagination": { "total_count": 1, "count": 1, "offset": 0 } }
topic
{ "data": [ { "id": 4003, "url": "http://gifmagazine.net/post_images/4003", "title": "いけー!", "description": "#cat #猫 cat 猫", "user_name": "berururunnnnnnn", "file_size": 2525252, "rate": "g", "image": { "default": { "url": "http://img.gifmagazine.net/gifmagazine/images/4003/original.gif", "width": 500, "height": 400 }, "medium": { "url": "http://img.gifmagazine.net/gifmagazine/images/4003/medium.gif", "width": 300, "height": 240 }, "small": { "url": "http://img.gifmagazine.net/gifmagazine/images/4003/small.gif", "width": 140, "height": 112 } }, "video": { "default": { "url": "http://img.gifmagazine.net/gifmagazine/images/4003/original.mp4", "width": 500, "height": 400 }, "medium": { "url": "http://img.gifmagazine.net/gifmagazine/images/4003/medium.mp4", "width": 300, "height": 240 } }, "tags": [ "猫" ] }, ], "pagination": { "total_count": 1, "count": 1, "offset": 0 } }
jumble
{ "data": [ { "id": 4003, "url": "http://gifmagazine.net/post_images/4003", "title": "いけー!", "description": "#cat #猫 cat 猫", "user_name": "berururunnnnnnn", "file_size": 2525252, "rate": "g", "image": { "default": { "url": "http://img.gifmagazine.net/gifmagazine/images/4003/original.gif", "width": 500, "height": 400 }, "medium": { "url": "http://img.gifmagazine.net/gifmagazine/images/4003/medium.gif", "width": 300, "height": 240 }, "small": { "url": "http://img.gifmagazine.net/gifmagazine/images/4003/small.gif", "width": 140, "height": 112 } }, "video": { "default": { "url": "http://img.gifmagazine.net/gifmagazine/images/4003/original.mp4", "width": 500, "height": 400 }, "medium": { "url": "http://img.gifmagazine.net/gifmagazine/images/4003/medium.mp4", "width": 300, "height": 240 } }, "tags": [ "猫" ] }, ], "pagination": { "total_count": 1, "count": 1, "offset": 0 } }
id検索
idで指定されたgifの詳細情報を返す。
パラメータ
- [必須]token : 専用トークンを指定する
Request
const YOUR_TOKEN = 'ここに専用トークンを書く'; var GIF_ID = 1;//gif画像のID var URL = 'http://api.gifmagazine.net/v1/detail_gifs/' + GIF_ID + '?token=' + YOUR_TOKEN ; $.getJSON(URL, function (response) { console.log(response); })
Node.js
const request = require('request'); const YOUR_TOKEN = 'ここに専用トークンを書く'; var URL = 'http://api.gifmagazine.net/v1/detail_gifs/'; var GIF_ID = 1;//gif画像のID request.get({ url: URL + GIF_ID , headers: {'Content-type': 'application/json'}, qs: { token:YOUR_TOKEN }, json: true }, function(err, req, json){ console.log(json); });
Response
{ "data": { "gif": { "id": 100000, "url": "https://gifmagazine.net/post_images/100000", "title": "かっこいいアウディが華麗に存在感を放っているGIF画像", "description": "[元動画] https://www.youtube.com/watch?v=_kPFr8H-o5g", "user_name": "gif_research61", "file_size": 2751967, "rate": "g", "image": { "default": { "url": "https://img.gifmagazine.net/gifmagazine/images/100000/original.gif", "width": 420, "height": 236 }, "medium": { "url": "https://img.gifmagazine.net/gifmagazine/images/100000/medium.gif", "width": 300, "height": 169 }, "small": { "url": "https://media.gifmagazine.net/rszgif/wiI-PfLjd7ltYD4Ric90Lj-EmMQ=/420/236/140/140/100000/", "width": 140, "height": 79 }, "medium_thumb": { "url": "https://img.gifmagazine.net/gifmagazine/images/100000/medium_thumb.png", "width": 300, "height": 169 }, "thumb": { "url": "https://img.gifmagazine.net/gifmagazine/images/100000/thumb.png", "width": 100, "height": 100 } }, "video": { "default": { "url": "https://img.gifmagazine.net/gifmagazine/images/100000/original.mp4", "width": 420, "height": 236 }, "medium": { "url": "https://img.gifmagazine.net/gifmagazine/images/100000/medium.mp4", "width": 300, "height": 169 } }, "tags": [ "from youtube", "車", "かっこいい", "普通車", "高級車", "アウディ" ] }, "related_gifs": [ { "id": 100023, "url": "https://gifmagazine.net/post_images/100023", "title": "かっこいいアウディが華麗に存在感を放っているGIF画像", "description": "[元動画] https://www.youtube.com/watch?v=qZVtnv3DeBI", "user_name": "gif_research61", "file_size": 3076909, "rate": "g", "image": { "default": { "url": "https://img.gifmagazine.net/gifmagazine/images/100023/original.gif", "width": 420, "height": 236 }, "medium": { "url": "https://img.gifmagazine.net/gifmagazine/images/100023/medium.gif", "width": 300, "height": 169 }, "small": { "url": "https://media.gifmagazine.net/rszgif/9XAWF4YNw99aR1XS_BffXhYDrzQ=/420/236/140/140/100023/", "width": 140, "height": 79 }, "medium_thumb": { "url": "https://img.gifmagazine.net/gifmagazine/images/100023/medium_thumb.png", "width": 300, "height": 169 }, "thumb": { "url": "https://img.gifmagazine.net/gifmagazine/images/100023/thumb.png", "width": 100, "height": 100 } }, "video": { "default": { "url": "https://img.gifmagazine.net/gifmagazine/images/100023/original.mp4", "width": 420, "height": 236 }, "medium": { "url": "https://img.gifmagazine.net/gifmagazine/images/100023/medium.mp4", "width": 300, "height": 169 } }, "tags": [ "from youtube", "車", "かっこいい", "普通車", "高級車", "アウディ" ] }, ] }, "pagination": { "total_count": 1, "count": 1, "offset": 0 } }