【個人開発】Clubhouseのルーム検索できるサービスを作りました！


<blockquote class="twitter-tweet"><p lang="ja" dir="ltr"><a href="https://twitter.com/hashtag/Clubhouse?src=hash&amp;ref_src=twsrc%5Etfw">#Clubhouse</a> でルームの検索ができず不便なので、ルーム検索ができる「Clubhouse Watch」というサービスを作りました！👋<br>ルームの名前、説明、ユーザ名から検索可能です。<br><br>Clubhouseの配信情報や人気ルームランキングもチェックできます。<br>ぜひ使ってみてください！🙌<a href="https://t.co/SrXasrKuzl">https://t.co/SrXasrKuzl</a></p>&mdash; 2z / AI MAKER (@2zn01) <a href="https://twitter.com/2zn01/status/1358563004112109568?ref_src=twsrc%5Etfw">February 7, 2021</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

---

こんにちは。
趣味でWebサービスの個人開発をしている、2z（Twitter： [@2zn01](https://twitter.com/2zn01) ）です。

# 今回作ったもの

今回はClubhouseの配信情報・人気ランキングを見たり、ルーム検索機能で話題のルームや興味のあるルームを探せる「Clubhouse Watch」というサービスを作りました！

* [Clubhouse Watch](https://b.hatena.ne.jp/entry/s/watchclub.house/)    
https://watchclub.house/

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr"><a href="https://twitter.com/hashtag/Clubhouse?src=hash&amp;ref_src=twsrc%5Etfw">#Clubhouse</a> でルームの検索ができず不便なので、ルーム検索ができる「Clubhouse Watch」というサービスを作りました！👋<br>ルームの名前、説明、ユーザ名から検索可能です。<br><br>Clubhouseの配信情報や人気ルームランキングもチェックできます。<br>ぜひ使ってみてください！🙌<a href="https://t.co/SrXasrKuzl">https://t.co/SrXasrKuzl</a></p>&mdash; 2z / AI MAKER (@2zn01) <a href="https://twitter.com/2zn01/status/1358563004112109568?ref_src=twsrc%5Etfw">February 7, 2021</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


# 何ができるの？

この「Clubhouse Watch」の機能としては、以下の通りです。


* 話題のルームを探す

![clubhouse_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273248/109e703a-a589-d780-8c9b-7e631132acd0.png)

* 直近の配信ルームを配信日時順に探す      
（配信日時順だけでなく、並び替えより話題順でも探すことができます）

![clubhouse_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273248/e3ccd238-199a-abd9-97c5-28ce24f5f598.png)

* ルーム検索から探す      
ルーム検索はルームの名前、説明、ユーザ名から検索可能です。

![clubhouse_3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273248/ff972847-4299-c965-dc07-2ec70b18e04a.png)



# 何で作ったの？

「Clubhouse」ではルームの検索ができないため、話題のルームや興味があるルームを探したりするのに不便だな～と感じていました。
そこで、エンジニアたるもの、機能がないなら作ってしまえ！ということで、この不便さを解決するために、自分でサービスを作ってみることにしました。

# ルーム情報の取得について

とはいえ、ClubhouseにはAPIがないため、ルームの情報を取得することができません。

そこで、僕が目をつけたのは、ツイッターです。
Cloubhouseのルームがツイッターにシェアされていれば、ツイッターAPIを使ってツイートからルームを収集することができます。

また、ツイートにはリツイート、いいね、リプライといった、他人がつけた評価みたいなものがつけられています。
リツイート数やいいね数、リプライ数が多いものほど、話題になっているルームととらえることができます。 この話題のルームをキュレーションすることで、効率的にルームの情報収集ができるのでは！？ と考えました。


# 使用技術

### Linux

クラウドのホスティングはGoogle Cloud Platformで、Google Compute Engine（GCE）でサーバを立てています。 

### Apache

webサーバはApacheを使っています。 Nginxもありますが、Apacheは普段から使っており、設定も把握していたため、いつも通りの安定の選択としました。

### MySQL

GCPのCloud SQLを使ってMySQLを立てています。


### PHP

サーバ側のプログラムはPHPを使って実装しました。


### ツイッターAPI

ツイートの情報を取得するために使用しています。
使い方については、後述させて頂きます。


### cron

cronを使って定期的にバッチを走らせてツイートを探索し、ルーム情報を収集しています。



# ツイッターAPIによるルームの取得

先述の通り、ルーム情報はツイッターAPIを使ってツイートから取得・収集しています。

※既に構築済みの仕組みがあったため、ツイッターAPIはv1.1を使用しています。
現在、ツイッターAPIは新しいv2のものが出ています。

* Search Tweets v2      
https://developer.twitter.com/en/docs/twitter-api/tweets/search/introduction


## ツイッターAPIの仕様（※v1.1）

* Search Tweets v1.1      
https://developer.twitter.com/en/docs/twitter-api/v1/tweets/search/api-reference/get-search-tweets

### エンドポイント

```
GET
https://api.twitter.com/1.1/search/tweets.json
```

### リクエストパラメータ

|パラメータ  |説明  |
|---|---|
|q|ツイートを検索するワード。検索演算子も利用できます|
|geocode|緯度,経度,範囲(半径)を指定。|
|lang|検索対象とする言語を指定。|
|locale|検索に使用する言語を指定。|
|result_type|ツイート結果をpopular(話題のツイート)、recent(最新のツイート)、mixed(すべてのツイート)の中から指定。|
|count|ツイートを取得する数を指定。|
|until|yyyy-mm-ddの形式で検索期間のエンドを指定。|
|since_id|検索対象とするツイートIDのスタートを指定。|
|max_id|検索対象とするツイートIDのエンドを指定。|
|include_entities|レスポンス値にentitiesプロパティを含めるかを指定|


また、上記のqパラメータには以下の検索演算子を使うことができます。
これはツイッターの検索でも同様に使用できますので、ぜひお試しください。

|検索演算子  |説明  |
|---|---|
|min_retweets:○○|リツイート数が○○以上のツイートを取得できます。|
|min_faves:○○|いいね数が○○以上のツイートを取得できます。|
|min_replies:○○|リプライ数が○○以上のツイートを取得できます。|
|@○○|○○(ユーザーID)さんに関するツイートを（ユーザーがしたツイートも、ユーザーへのリプライ、メンションも含め）取得できます。|
|from:○○|○○(ユーザーID)さんがしたツイートを取得できます。|
|to:○○|○○(ユーザーID)さんへのツイート（リプライ、メンション）を取得できます。|
|since:yyyy-mm-dd|yyyy年mm月dd日以降のツイートを取得できます。|
|until:yyyy-mm-dd|yyyy年mm月dd日までのツイートを取得できます。|
|filter:images|画像が含まれるツイートを取得できます。|
|filter:videos|動画が含まれるツイートを取得できます。|
|filter:links|リンクが含まれるツイートを取得できます。|
|filter:news|ニュースに関するツイートを取得できます。|
|filter:periscope|ライブ配信に関するツイートを取得できます。|
|filter:verified|認証アカウントのツイートを取得できます。|
|filter:safe|不適切でないツイートを取得できます。|
|source:○○|ツイートの投稿元（クライアント）を指定して取得することができます。○○には「Instagram」などが使えるようです。|
|near:○○ within:××km|○○の場所、半径××km以内でツイートされたものを取得できます。|
|geocode:○○,△△,××km|緯度○○、経度△△、半径××km以内でツイートされたものを取得できます。|
|lang：○○|ツイートの言語を指定して検索することができます。日本語の場合は「ja」を指定します。|
|"○○ ××"|「○○ ××」に完全一致したツイートのみ取得できます。|
|:)|ポジティブなツイートを取得できるみたいです。|
|:(|ネガティブなツイートを取得できるみたいです。|
|-|条件の先頭に「-」をつけると否定の条件にすることができます。これを使うことで除外したツイートを取得できます。|
|OR|通常は半角スペースで複数のワードを入力するとAND検索となりますが、ORを使うことでOR検索をすることができます。|


## Clubhouseに関するツイートを収集する方法

Clubhouseに関するツイートの取集方法ですが、上で紹介したツイッターAPIの検索演算子を使って「q=www.joinclubhouse.com filter:links」という指定をして検索しています。

また、さらに「min_retweets」と「min_faves」を使って、以下の流れで行うことで話題のルームを収集することができます。

* 1. リツイート数が 10000 以上 または いいね数が 10000 以上のツイート収集（すべて収集したら次へ）

　↓

* 2. リツイート数が 1000 以上 または いいね数が 1000 以上のツイート収集（すべて収集したら次へ）

　↓

* 3. リツイート数が 100 以上 または いいね数が 100 以上のツイート収集（すべて収集したら次へ）

　↓

* 4. リツイート数が 10 以上 または いいね数が 10 以上のツイート収集（すべて収集したら次へ）

　↓

* 5. リツイート数が 1 以上 または いいね数が 1 以上のツイート収集（すべて収集したら終わり）

上記の要領でツイートを収集することで、リツイート数やいいね数が多いツイートから収集することが可能です。




# 最後に

今回はClubhouseの配信情報・人気ランキングを見たり、ルーム検索機能で話題のルームや興味のあるルームを探せる「Clubhouse Watch」について、ご紹介しました。
以下のURLよりぜひご活用頂ければ嬉しいです！

* [Clubhouse Watch](https://b.hatena.ne.jp/entry/s/watchclub.house/)    
https://watchclub.house/


また、このサービスに少しでも興味をもって頂けましたら、ぜひともフォローやいいね、リツイートで応援お願いします！

* はてなブックマーク
    * [この記事をブックマーク](https://b.hatena.ne.jp/entry/s/qiita.com/2zn01/items/1647ba8ef7ecbf96af82)
    * [「Clubhouse Watch」のサービスをブックマーク](https://b.hatena.ne.jp/entry/s/watchclub.house/)
* Twitter： [@2zn01](https://twitter.com/2zn01)
* Qiita： [@2zn01](https://qiita.com/2zn01)
* Zenn： [@2zn01](https://zenn.dev/2zn01)
* note： [@2zn01](https://note.mu/2zn01)


<blockquote class="twitter-tweet"><p lang="ja" dir="ltr"><a href="https://twitter.com/hashtag/Clubhouse?src=hash&amp;ref_src=twsrc%5Etfw">#Clubhouse</a> でルームの検索ができず不便なので、ルーム検索ができる「Clubhouse Watch」というサービスを作りました！👋<br>ルームの名前、説明、ユーザ名から検索可能です。<br><br>Clubhouseの配信情報や人気ルームランキングもチェックできます。<br>ぜひ使ってみてください！🙌<a href="https://t.co/SrXasrKuzl">https://t.co/SrXasrKuzl</a></p>&mdash; 2z / AI MAKER (@2zn01) <a href="https://twitter.com/2zn01/status/1358563004112109568?ref_src=twsrc%5Etfw">February 7, 2021</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


普段は以下のようなサービスを開発・運営していますので、興味があるものがございましたら、ぜひとも使ってみて頂けると嬉しいです！

* [AIメーカー](https://b.hatena.ne.jp/entry/s/aimaker.io/)
https://aimaker.io/
誰でも簡単にAIを作ったり、試したりできるサービスです。
使ったAIを活用するためのAPIも提供していますので、ぜひご活用ください。

* [文字起こすくん](https://b.hatena.ne.jp/entry/s/text.aimaker.io/recognize-bot/)
https://text.aimaker.io/recognize-bot/
画像、音声、動画をアップするだけで簡単に文字起こし・書き起こしできるサービスです。話者の識別も可能になりました！    

* [テロップメーカー](https://b.hatena.ne.jp/entry/s/text.aimaker.io/recognize-video/)
https://text.aimaker.io/recognize-video/
動画をアップロードするだけで、動画内の音声を認識して文字起こしを行い、自動で動画に字幕・テロップをつけるサービスです。こちらも話者の識別が可能になりました！