LoginSignup
103
47

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

Last updated at Posted at 2021-02-10

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

今回作ったもの

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

何ができるの?

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

  • 話題のルームを探す

clubhouse_1.png

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

clubhouse_2.png

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

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

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

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

 ↓

    1. リツイート数が 1000 以上 または いいね数が 1000 以上のツイート収集(すべて収集したら次へ)

 ↓

    1. リツイート数が 100 以上 または いいね数が 100 以上のツイート収集(すべて収集したら次へ)

 ↓

    1. リツイート数が 10 以上 または いいね数が 10 以上のツイート収集(すべて収集したら次へ)

 ↓

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

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

最後に

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

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

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

103
47
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
103
47