Clubhouseのルームを検索できるサービスを作ってみた

公開:2021/02/13
更新:2021/02/13
6 min読了の目安(約5600字TECH技術記事

https://twitter.com/2zn01/status/1358563004112109568

こんにちは。
趣味でWebサービスの個人開発をしている、2z(Twitter: @2zn01 )です。

今回作ったもの

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

https://watchclub.house/

https://twitter.com/2zn01/status/1358563004112109568

何ができるの?

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

  • 話題のルームを探す

話題のルームを探す

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

直近の配信ルームを配信日時順に探す

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

ルーム検索から探す

何で作ったの?

「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のものが出ています。

ツイッターAPIの仕様(※v1.1)

エンドポイント

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」を使って、以下の流れで行うことで話題のルームを収集することができます。

①リツイート数が 10000 以上 または いいね数が 10000 以上のツイート収集(すべて収集したら次へ)
   ↓
②リツイート数が 1000 以上 または いいね数が 1000 以上のツイート収集(すべて収集したら次へ)
   ↓
③リツイート数が 100 以上 または いいね数が 100 以上のツイート収集(すべて収集したら次へ)
   ↓
④リツイート数が 10 以上 または いいね数が 10 以上のツイート収集(すべて収集したら次へ)
   ↓
⑤リツイート数が 1 以上 または いいね数が 1 以上のツイート収集(すべて収集したら終わり)

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

最後に

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

https://watchclub.house/

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

https://twitter.com/2zn01/status/1358563004112109568

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

  • AIメーカー
    誰でも簡単にAIを作ったり、試したりできるサービスです。
    使ったAIを活用するためのAPIも提供していますので、ぜひご活用ください。

https://aimaker.io/
  • waifu2x-multi
    画像・動画を高画質化・拡大・ノイズ除去できるサービスです。

https://waifu2x.me/
  • 文字起こすくん
    画像、音声、動画をアップするだけで簡単に文字起こし・書き起こしできるサービスです。話者の識別も可能になりました!

https://text.aimaker.io/recognize-bot/
  • テロップメーカー
    動画をアップロードするだけで、動画内の音声を認識して文字起こしを行い、自動で動画に字幕・テロップをつけるサービスです。こちらも話者の識別が可能になりました!

https://text.aimaker.io/recognize-video/