ProtoPedia APIで遊ぼう！

自分の作った作品を登録することができるProtoPediaは、便利なAPIが存在します。
ここでは軽くそのAPIを説明したいと思います。

# ProtoPedia API

ProtoPediaAPIの仕様はこちら！

https://protopediaapi.docs.apiary.io/

現在提供されているのは、以下の４つの機能

* 作品の一覧取得
* 作品のイベント登録
* 会社の開発素材の取得
* 開発素材の取得


この中で、「作品のイベント登録」APIだけは、イベントのごとの認証コードが必要になるため、現時点で簡単に利用することができません。
今後、いろいろ機能が解放されていけば利用できるようになる可能性はあります。

今回は、その中の作品の一覧取得を解説します。

##　作品の一覧取得

文字通り、作品を取得することができるAPIです。
以下のようにGETリクエストを行うことで情報を取得することができます。

```http:JSON形式
https://protopedia.net/api/prototypes.json?userNm=userNm&companySlug=companySlug&materialId=materialId&tagNm=tagNm&eventId=eventId&prototypeId=prototypeId&status=status&limit=limit&offset=offset
```
```http:TSV形式
https://protopedia.net/api/prototypes.tsv?userNm=userNm&companySlug=companySlug&materialId=materialId&tagNm=tagNm&eventId=eventId&prototypeId=prototypeId&status=status&limit=limit&offset=offset
```

### パラメータ
|パラメータ|名称|型|説明|
|:---|:---|:---|:---|
|userNm|ユーザー名|String|指定されたユーザーに関する作品を取得します *1|
|companySlug|会社スラグ|String|指定された会社に関する作品を取得します *2|
|materialId|開発素材ID|Number|指定された開発素材に関する作品を取得します *3|
|prototypeId|作品ID|Number|指定された作品IDに関する作品を取得します *4|
|status|ステータス|Number|指定されたイベントに関する作品を取得します *5|
|tagNm|タグ名|String|設定されているタグに関する作品を取得します *6|
|eventId|イベントID|Number|指定されたイベントに関する作品を取得します *7|
|limit|件数（初期値は100件）|Number|取得する件数を指定します|
|offset|開始位置|Number|取得する開始位置を指定します|

#### *1 ユーザー名について
メンバーの項目に追加されている**＠以下**がユーザー名となります。
![ユーザー名](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189829/7d0dba8c-d0f7-f582-91fc-cfd9f2d542fd.png)
※この場合は、「higedaruma」がユーザー名です

#### *2 会社スラグについて
[会社一覧](https://protopedia.net/company/)から、特定の企業ページを開き、URLの**company以下**が会社スラグとなります。
![会社スラグ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189829/5442b32b-1914-6dac-17d8-fd2528d7aa46.png)
※この場合は、「ma」が会社スラグです。

#### *３ 開発素材IDについて
[開発素材](https://protopedia.net/material)から、開発素材ページを開き、URLの**material以下**が開発素材IDとなります。
![開発素材ID](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189829/4c039125-551f-b97b-f9b9-0982e8d050fe.png)
※この場合は、「４６３」が開発素材IDです。

#### *4 作品IDについて / *5 ステータスについて / *6 タグ名について
作品ページを開き、URLの**prototype以下**が作品IDとなります。

作品名の下にある**「開発中」**の表示がステータスです。
ステータスは、以下の４種類があります。
1. アイデア
2. 開発中
3. 完成
4. 供養

タグは、＃で表示された部分で、**＃**を除いたものがタグ名となります。

![作品情報](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189829/11be9834-fd6c-e654-e886-c270d57ef981.png)
※この場合は、「２５５６」が作成ID、開発中（２）が、ステータス、「VUI」、「twilio_online_contest_2021」、
「赤い芸人」がタグ名となります。

#### *５ イベントIDについて
イベントページを開き、URLの**event以下**がイベントIDとなります。
![イベント名](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189829/494b9e29-eedc-f8f0-fcb9-62fe3258b7da.png)
※この場合は、「２１」がイベントIDです。

また、イベントに紐づいている場合、作品の関連イベントにイベント情報が掲載されています。
![関連イベント](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189829/3dc3ae87-d0ed-853b-099d-4c985bdea60c.png)


### 取得例
実際に、APIを使って作品を取得します。
今回は[こちらの作品](https://protopedia.net/prototype/2566)のJSON情報を取得します。
特定の作品の場合は、作品ID（prototypeId）を指定するだけです。

##### リクエストURL
```
https://protopedia.net/api/prototypes.json?prototypeId=2566
```


##### レスポンス情報

上記リクエストを発行すると、以下のようなJSON情報が返ってきます。

```
[
	{
		"id": 2566,
		"prototypeNm": "高橋コール",
		"summary": "自分の肉声を赤い芸人さん（カズレーザーじゃない）に変換して、ご指定の電話番号にお届けします！",
		"videoUrl": "https://youtu.be/2taR31aJlSg",
		"status": 2,
		"systemDescription": "1. twilioから、通知先の電話番号を取得し、メッセージを録音します。\r\n2. 録音したメッセージを、AzureのSpeechToTextで文字に変換します。\r\n3. 変換した文字を、CoeFontを使用し音声データに変換します。\r\n4. 取得した電話番号に、電話を行い、変換した音声データを再生します。\r\n\r\nVoiced by https://CoeFont.CLOUD",
		"freeComment": "赤い芸人さんからの**酷評に疲れた方必見**<br>\r\n**赤い芸人さんの声**で褒められませんか？<br>\r\n\r\nどんな言葉を話すかは、あなた次第！<br>\r\n\r\n酷評で疲れているあの人や、酷評で疲れている自分自身にもお使いください！<br>\r\n\r\nスマホなんていらない！\r\n## 電話さえあれば、夢が叶います！",
		"slideMode": 1,
		"teamNm": "",
		"officialLink": "",
		"relatedLink": "https://coefont.cloud/coefonts/34fa6f84-0664-4d93-9642-404cabc9edb8",
		"relatedLink2": "https://qiita.com/masaya3/items/2391c012d9c87c53680a",
		"relatedLink3": "https://qiita.com/masaya3/items/86388fad4a4e1ce2d6fc",
		"relatedLink4": "https://qiita.com/masaya3/items/429c12c2c742b5fc07f5",
		"relatedLink5": "",
		"releaseFlg": 2,
		"thanksFlg": 1,
		"mainUrl": "9848cd55-f27b-4399-9067-4741afda759a.png",
		"viewCount": 474,
		"goodCount": 11,
		"commentCount": 2,
		"userNm": "higedaruma",
		"companyNm": "日本マイクロソフト株式会社",
		"materialNm": "Microsoft Azure",
		"eventTitle": "Twilioオンラインコンテスト2021",
		"tags": "twilio_online_contest_2021,VUI,赤い芸人",
		"image1": "https://protopedia.net/pic/9848cd55-f27b-4399-9067-4741afda759a.png",
		"image2": null,
		"image3": null,
		"image4": null,
		"image5": null,
		"systemImage": "https://protopedia.net/pic/1c29d4b9-e755-4700-a5ee-300ee898b93a.png",
		"releaseAt": "2021-09-29T00:42:50+09:00",
		"createAt": "2021-09-27T08:24:04+09:00",
		"updateAt": "2021-10-04T10:25:14+09:00",
		"nid": null,
		"uuid": "5e428673-338a-4bd6-b1a3-84f8d9450532"
	},
	....
]
```

###### レスポンス情報 
|パラメータ|説明|
|:---|:---|
| id |作品ID|
| prototypeNm |作品タイトル|
| summary |概要|
| videoUrl |動画|
| status |作品ステータス|
| systemDescription |システム概要|
| freeComment |ストーリー|
| slideMode |スライドモードのチェック状況|
| teamNm |メンバー数|
| officialLink |作品のURL|
| relatedLink1 |関連リンク|
| relatedLink2 |関連リンク|
| relatedLink3 |関連リンク|
| relatedLink4 |関連リンク|
| relatedLink5 |関連リンク|
| releaseFlg |公開状況|
| thanksFlg ||
| mainUrl |メイン画像名称（１枚目の画像）|
| viewCount |閲覧数|
| goodCount |いいね数|
| commentCount |コメント数|
| userNm |ユーザー名（作者）|
| companyNm |開発素材の企業名|
| materialNm |開発素材名|
| eventTitle |イベントタイトル名|
| tags |タグ名（複数の場合はカンマ区切り）|
| image1 |画像|
| image2 |画像|
| image3 |画像|
| image4 |画像|
| image5 |画像|
| systemImage |システム構成の画像|
| releaseAt |公開日|
| createAt |作成日|
| updateAt |更新日|


取得される情報は、少し癖があるので注意が必要です。

上記のレスポンス情報を見てもわかるように、**開発素材**と**イベント情報**も含んだ状態で返却されます。
**開発素材**と**イベント情報**は、以下のように結びついた形となっています。

* イベント
  * 　開発素材

例えば、この作品の場合、２つのイベントに登録されています。
![イベント一覧](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189829/0c82230a-cdf2-7baf-bbd3-6ab366326de2.png)

そして、作品には、３つの開発素材が登録されています。
![開発素材一覧](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189829/7e2d7ea7-f166-f1af-839e-ff9764c35477.png)

今回の場合、１つの作品情報を取得しようとすると、
２つのイベント×３つの開発素材なので、６件のデータが返ってきますので、使用時にはご注意ください。

## まとめ
ProtoPediaAPIを利用すれば、手軽に作品の情報を取得することができます。
ぜひこれらのAPIも活用して、面白いものを作ってみてはいかがでしょうか？