Clubhouseのルームを検索できるサービスを作ってみた
こんにちは。
趣味でWebサービスの個人開発をしている、2z(Twitter: @2zn01 )です。
今回作ったもの
今回はClubhouseの配信情報・人気ランキングを見たり、ルーム検索機能で話題のルームや興味のあるルームを探せる「Clubhouse Watch」というサービスを作りました!
何ができるの?
この「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)
- 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」を使って、以下の流れで行うことで話題のルームを収集することができます。
①リツイート数が 10000 以上 または いいね数が 10000 以上のツイート収集(すべて収集したら次へ)
↓
②リツイート数が 1000 以上 または いいね数が 1000 以上のツイート収集(すべて収集したら次へ)
↓
③リツイート数が 100 以上 または いいね数が 100 以上のツイート収集(すべて収集したら次へ)
↓
④リツイート数が 10 以上 または いいね数が 10 以上のツイート収集(すべて収集したら次へ)
↓
⑤リツイート数が 1 以上 または いいね数が 1 以上のツイート収集(すべて収集したら終わり)
上記の要領でツイートを収集することで、リツイート数やいいね数が多いツイートから収集することが可能です。
最後に
今回はClubhouseの配信情報・人気ランキングを見たり、ルーム検索機能で話題のルームや興味のあるルームを探せる「Clubhouse Watch」について、ご紹介しました。
以下のURLよりぜひご活用頂ければ嬉しいです!
また、このサービスに少しでも興味をもって頂けましたら、ぜひともフォローやいいね、リツイートで応援お願いします!
普段は以下のようなサービスを開発・運営していますので、興味があるものがございましたら、ぜひとも使ってみて頂けると嬉しいです!
-
AIメーカー
誰でも簡単にAIを作ったり、試したりできるサービスです。
使ったAIを活用するためのAPIも提供していますので、ぜひご活用ください。
-
waifu2x-multi
画像・動画を高画質化・拡大・ノイズ除去できるサービスです。
-
文字起こすくん
画像、音声、動画をアップするだけで簡単に文字起こし・書き起こしできるサービスです。話者の識別も可能になりました!
-
テロップメーカー
動画をアップロードするだけで、動画内の音声を認識して文字起こしを行い、自動で動画に字幕・テロップをつけるサービスです。こちらも話者の識別が可能になりました!
Discussion