tag:crieit.net,2005:https://crieit.net/tags/BigQuery/feed 「BigQuery」の記事 - Crieit Crieitでタグ「BigQuery」に投稿された最近の記事 2019-09-24T20:45:37+09:00 https://crieit.net/tags/BigQuery/feed tag:crieit.net,2005:PublicArticle/15422 2019-09-24T20:45:37+09:00 2019-09-24T20:45:37+09:00 https://crieit.net/posts/Firestore-3 Firestoreのデータを分析するための3つの方法とその注意点 <p><a target="_blank" rel="nofollow noopener" href="https://qiita.com/kira_puka/items/ef80b07347cfdd37f116">別の記事</a>を書く前に、いろいろ試したことの備忘録。<br /> Firestoreのデータをいろいろ見たかったけど、<br /> 別プロジェクトの移動してみることにした経緯のまとめ。</p> <h2 id="試したのは以下の3つ"><a href="#%E8%A9%A6%E3%81%97%E3%81%9F%E3%81%AE%E3%81%AF%E4%BB%A5%E4%B8%8B%E3%81%AE3%E3%81%A4">試したのは以下の3つ</a></h2> <ol> <li>エクスポートデータをBigQueryにインポートしてBigQuery上で確認</li> <li><a target="_blank" rel="nofollow noopener" href="https://github.com/jloosli/node-firestore-import-export">node-firestore-import-export</a>を使ってローカルのJSONファイルとしてエクスポートして確認</li> <li>別プロジェクトにデータを移行して、別プロジェクト上で確認(<a target="_blank" rel="nofollow noopener" href="https://qiita.com/kira_puka/items/ef80b07347cfdd37f116">この記事</a>)</li> </ol> <p>それぞれの方法と注意点は以下の通り。</p> <h3 id="1. BigQueryにインポートして確認"><a href="#1.+BigQuery%E3%81%AB%E3%82%A4%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%88%E3%81%97%E3%81%A6%E7%A2%BA%E8%AA%8D">1. BigQueryにインポートして確認</a></h3> <p><a target="_blank" rel="nofollow noopener" href="https://cloud.google.com/bigquery/docs/loading-data-cloud-firestore?hl=ja">公式ドキュメント</a>などで紹介されている通り、<br /> FirestoreのデータをBigQueryにインポートできるらしい。</p> <p>これが一番いい方法だが、後述するカラム10000制約に引っかかったので、諦める形に。。</p> <h4 id="流れとしては、こんな感じ。"><a href="#%E6%B5%81%E3%82%8C%E3%81%A8%E3%81%97%E3%81%A6%E3%81%AF%E3%80%81%E3%81%93%E3%82%93%E3%81%AA%E6%84%9F%E3%81%98%E3%80%82">流れとしては、こんな感じ。</a></h4> <ol> <li>バックファイルファイルを配置できるようCloud StorageにBucketを作成</li> <li>gcloudを使って、Firestoreのバックアップファイルを作成したBucketにエクスポート</li> <li>BigQueryでデータセットを作成</li> <li>テーブルを作成する際に、テーブル作成元に「Google Cloud Storage」を選択</li> </ol> <h4 id="注意: ハマった点"><a href="#%E6%B3%A8%E6%84%8F%3A+%E3%83%8F%E3%83%9E%E3%81%A3%E3%81%9F%E7%82%B9">注意: ハマった点</a></h4> <h5 id="a. バックアップデータを作成する際は、collection-idsを指定しないといけない"><a href="#a.+%E3%83%90%E3%83%83%E3%82%AF%E3%82%A2%E3%83%83%E3%83%97%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%E9%9A%9B%E3%81%AF%E3%80%81collection-ids%E3%82%92%E6%8C%87%E5%AE%9A%E3%81%97%E3%81%AA%E3%81%84%E3%81%A8%E3%81%84%E3%81%91%E3%81%AA%E3%81%84">a. バックアップデータを作成する際は、collection-idsを指定しないといけない</a></h5> <p><a target="_blank" rel="nofollow noopener" href="https://cloud.google.com/bigquery/docs/loading-data-cloud-firestore?hl=ja">公式ドキュメント</a>にも書いてあるが以下の通りらしい。。</p> <blockquote> <p>エクスポート コマンドには、<strong>collection-idsフィルタを指定する必要があります</strong>。<br /> コレクションIDフィルタを指定せずにエクスポートされたデータをBigQueryに読み込むことはできません。</p> </blockquote> <p>なので、バックアップする際は、こんな感じで、コレクションを指定しなければならない。</p> <pre><code class="console">$ gcloud beta firestore export gs://[BUCKET_NAME] --collection-ids=[COLLECTION_ID_1],[COLLECTION_ID_2] </code></pre> <h5 id="b. ファイル形式も「Cloud DataStoreバックアップ」に変更しないといけない"><a href="#b.+%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%BD%A2%E5%BC%8F%E3%82%82%E3%80%8CCloud+DataStore%E3%83%90%E3%83%83%E3%82%AF%E3%82%A2%E3%83%83%E3%83%97%E3%80%8D%E3%81%AB%E5%A4%89%E6%9B%B4%E3%81%97%E3%81%AA%E3%81%84%E3%81%A8%E3%81%84%E3%81%91%E3%81%AA%E3%81%84">b. ファイル形式も「Cloud DataStoreバックアップ」に変更しないといけない</a></h5> <p><a target="_blank" rel="nofollow noopener" href="https://cloud.google.com/bigquery/docs/loading-data-cloud-firestore?hl=ja">公式ドキュメント</a>のスクリーンショットになかったのでハマった。。</p> <p><img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/478782/a9eac817-3145-5784-865e-756c50ec5109.png" alt="スクリーンショット_2019-09-24_19_50_01.png" /></p> <p>インポートする際には、ファイル形式も「Cloud DataStoreバックアップ」に変更しないといけないらしい。。<br /> なにもしていないと、ファイル形式「Avro」になっているので、ファイル形式が合わずエラーになってしまう。。</p> <h5 id="c. ドキュメントフィールドがobjectの場合、ドット区切りで展開され、カラムの上限は10000まで"><a href="#c.+%E3%83%89%E3%82%AD%E3%83%A5%E3%83%A1%E3%83%B3%E3%83%88%E3%83%95%E3%82%A3%E3%83%BC%E3%83%AB%E3%83%89%E3%81%8Cobject%E3%81%AE%E5%A0%B4%E5%90%88%E3%80%81%E3%83%89%E3%83%83%E3%83%88%E5%8C%BA%E5%88%87%E3%82%8A%E3%81%A7%E5%B1%95%E9%96%8B%E3%81%95%E3%82%8C%E3%80%81%E3%82%AB%E3%83%A9%E3%83%A0%E3%81%AE%E4%B8%8A%E9%99%90%E3%81%AF10000%E3%81%BE%E3%81%A7">c. ドキュメントフィールドがobjectの場合、ドット区切りで展開され、カラムの上限は10000まで</a></h5> <p>これが原因で諦めました。。</p> <p>Firestore上で、以下のようなobjectやマップなどが存在すると、</p> <pre><code class="json">{ "uid": "XXXXX", "group": { "groupA": true, "groupB": false } } </code></pre> <p>BigQueryにインポートする際、ドットで繋げる形で展開されます。</p> <pre><code class="csv">uid, group.groupA, group.groupB </code></pre> <p>また、<a target="_blank" rel="nofollow noopener" href="https://cloud.google.com/bigquery/docs/loading-data-cloud-firestore?hl=ja">公式ドキュメント</a>の制約事項に、</p> <blockquote> <p>Cloud Firestore のエクスポートを正しく読み込むには、<br /> エクスポートデータ内のドキュメントが一貫したスキーマを共有し、<br /> 個別のフィールド名が<strong>10,000個未満</strong>でなければなりません。</p> </blockquote> <p>と、あるため、大量のプロパティを持つobjectをセットしていると、インポート時にエラーになります。。</p> <p><strong>対応策</strong></p> <p>フィールド数の問題を回避する方法として、特定のフィールドだけ読み込むこともできます。</p> <blockquote> <p>CLI で --projection_fieldsフラグを使用するか、<br /> load ジョブの構成でprojectionFieldsプロパティを設定することで<br /> 特定のフィールドを読み込むことができます。</p> </blockquote> <p>とあるため、読み込むフィールドを指定することで、回避することができそうです。</p> <h2>2. <a target="_blank" rel="nofollow noopener" href="https://github.com/jloosli/node-firestore-import-export">node-firestore-import-export</a>でローカルにエクスポート</h2> <p>次にやったのがこれ。<br /> <a target="_blank" rel="nofollow noopener" href="https://github.com/jloosli/node-firestore-import-export">node-firestore-import-export</a>を使うと、CUIでJSON形式でエクスポートできるらしい。<br /> JSON形式でエクスポートできれば、ツールなど作っていろいろできそうかなと。</p> <p>実行するには、Google Cloudアカウントのcredentialsファイルが必要。</p> <pre><code class="console"># インストール $ npm install -g node-firestore-import-export # 全体のバックアップ firestore-export --accountCredentials path/to/credentials/file.json --backupFile backups_myDatabase.json # コレクションを指定して、一部だけをエクスポート firestore-export --accountCredentials path/to/credentials/file.json --backupFile backups_myDatabase.json --nodePath collectionA </code></pre> <p>データ量が多い場合は、<code>--max_old_space_size</code>を指定して実行する。</p> <pre><code>node --max_old_space_size=8192 /usr/local/bin/firestore-export --accountCredentials path/to/credentials/file.json --backupFile backups_myDatabase.json </code></pre> <h4 id="注意: というか見送った点。。"><a href="#%E6%B3%A8%E6%84%8F%3A+%E3%81%A8%E3%81%84%E3%81%86%E3%81%8B%E8%A6%8B%E9%80%81%E3%81%A3%E3%81%9F%E7%82%B9%E3%80%82%E3%80%82">注意: というか見送った点。。</a></h4> <p>サクッと使えてよかったけど、データ量が多いと、やはりつらい。。</p> <ol> <li>データ量が多いと、メモリ不足やFirestoreとのコネクション切れで失敗する</li> <li>無料枠でも使えるが、firebase-adminを使って取ってきているだけなので読み込みが大量に発生する</li> <li>エクスポートしたファイルも大きくなるため、ツールでもメモリを大量に使う</li> </ol> <h3 id="別プロジェクトにデータを移行して、別プロジェクト上で確認"><a href="#%E5%88%A5%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%81%AB%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E7%A7%BB%E8%A1%8C%E3%81%97%E3%81%A6%E3%80%81%E5%88%A5%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E4%B8%8A%E3%81%A7%E7%A2%BA%E8%AA%8D">別プロジェクトにデータを移行して、別プロジェクト上で確認</a></h3> <p>上の2つの方法を試してなんとかしたかったのは、このの3つ。</p> <ol> <li>エクスポート時に大量の読み込みが発生し、<strong>本番環境の無料枠を消費する</strong></li> <li><strong>ネストが深いobjectがあると</strong>と簡単にBigQueryにインポートできない</li> <li>ローカルファイルでも全データをメモリ上に展開するので、つらい</li> </ol> <p>そのため、別プロジェクトに移行して、本番環境と関係ない部分で、いろいろ触れるようにしてみた。<br /> これであれば、本番環境を気にせず、firebase-adminとかで、いろいろ調べたりできそう。</p> <p>詳細なやり方は、<a target="_blank" rel="nofollow noopener" href="https://qiita.com/kira_puka/items/ef80b07347cfdd37f116">別の記事</a>にまとめました。</p> <p>他と同様、リアルタイムの情報ではないので、注意が必要。</p> <h2 id="簡単なまとめ"><a href="#%E7%B0%A1%E5%8D%98%E3%81%AA%E3%81%BE%E3%81%A8%E3%82%81">簡単なまとめ</a></h2> <h5 id="1. BigQueryにインポートして確認"><a href="#1.+BigQuery%E3%81%AB%E3%82%A4%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%88%E3%81%97%E3%81%A6%E7%A2%BA%E8%AA%8D">1. BigQueryにインポートして確認</a></h5> <ul> <li>BigQuery上なので、SQLで分析ができる</li> <li>有料プランのみ</li> <li><strong>注意</strong>: バックアップデータを作成する際は、collection-idsを指定しないといけない</li> <li><strong>注意</strong>: ファイル形式も「Cloud DataStoreバックアップ」に変更しないといけない</li> <li><strong>注意</strong>: ドキュメントフィールドがobjectの場合、ドット区切りで展開され、カラムの上限は10000</li> </ul> <h5>2. <a target="_blank" rel="nofollow noopener" href="https://github.com/jloosli/node-firestore-import-export">node-firestore-import-export</a>でローカルにエクスポート</h5> <ul> <li>無料枠でも使える</li> <li>JSONでエクスポートできる</li> <li><strong>注意</strong>: エクスポート時に大量の読み込みが発生し、本番環境の無料枠を消費する</li> <li><strong>注意</strong>: ドキュメントのネストが深いと簡単にBigQueryにインポートできない</li> <li><strong>注意</strong>: ローカルファイルでも全データをメモリ上に展開するのでつらい</li> </ul> <h5>3. 別プロジェクトにデータを移行して、別プロジェクト上で確認(<a target="_blank" rel="nofollow noopener" href="https://qiita.com/kira_puka/items/ef80b07347cfdd37f116">この記事</a>)</h5> <ul> <li>有料プランのみ</li> <li>別プロジェクトなので、本番環境を気にせず使える</li> </ul> <h2 id="こんなのつくってます!!"><a href="#%E3%81%93%E3%82%93%E3%81%AA%E3%81%AE%E3%81%A4%E3%81%8F%E3%81%A3%E3%81%A6%E3%81%BE%E3%81%99%21%21">こんなのつくってます!!</a></h2> <p>積読用の読書管理アプリ 『積読ハウマッチ』をリリースしました!<br /> <a target="_blank" rel="nofollow noopener" href="https://tsundoku.site">積読ハウマッチ</a>は、Nuxt.js+Firebaseで開発してます!</p> <p><img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/478782/572d4947-f40b-e4dc-1c9c-bc584cd2a66c.png" width="200"/></p> <p>もしよかったら、遊んでみてくださいヽ(=´▽`=)ノ</p> <p>要望・感想・アドバイスなどあれば、<br /> 公式アカウント(<a target="_blank" rel="nofollow noopener" href="https://twitter.com/MemoryLoverz">@MemoryLoverz</a>)や開発者(<a target="_blank" rel="nofollow noopener" href="https://twitter.com/kira_puka">@kira_puka</a>)まで</p> <h1 id="参考にしたサイト"><a href="#%E5%8F%82%E8%80%83%E3%81%AB%E3%81%97%E3%81%9F%E3%82%B5%E3%82%A4%E3%83%88">参考にしたサイト</a></h1> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://firebase.google.com/docs/firestore/manage-data/export-import?hl=ja">データのエクスポートとインポート  |  Firebase</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://medium.com/google-cloud-jp/firestore-backup-67327a74cd54">Cloud Firestoreのバックアップ・リストア - google-cloud-jp - Medium</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://note.mu/yo16/n/ne25615bab8f5">gcloudのアカウント変更とプロジェクト変更|yo16|note</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://qiita.com/ShuA/items/1ff83b8d804168b087ba">自分用GCPコマンドリファレンス - Qiita</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://qiita.com/Takakuwa-Shun/items/ac455c96a81a189eacce">gcloudの自分用メモ - Qiita</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://blog.engineer.adways.net/entry/2018/06/08/150000">gcloudコマンド(GCP)で複数のプロジェクトとアカウントの使い分けを便利に - Adwaysエンジニアブログ</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://qiita.com/sakamossan/items/8ff74ed377dc77325b80">macosにgcloudとkubectlのインストール - Qiita</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://cloud.google.com/sdk/docs/quickstart-macos?hl=ja">macOS 用のクイックスタート  |  Cloud SDK のドキュメント  |  Google Cloud</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://cloud.google.com/bigquery/docs/loading-data-cloud-firestore?hl=ja">Cloud Firestore のエクスポートからのデータの読み込み  |  BigQuery  |  Google Cloud</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://medium.com/google-cloud-jp/firestore-bigquery-3b887a5bc27e">エクスポートされたFirestoreドキュメントをBigQueryに自動ロード - google-cloud-jp - Medium</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://qiita.com/kurikei/items/ece7f6a21115494386c9">Cloud Firestore のコレクションを日次で Bigquery にロードする - Qiita</a></li> </ul> きらぷか@積読ハウマッチ/SSSAPIなど tag:crieit.net,2005:PublicArticle/14675 2018-12-19T08:27:14+09:00 2018-12-20T01:27:20+09:00 https://crieit.net/posts/MySQL-BigQuery 話題のツイートを探せる「ツイレポ」に用いられている技術について(MySQL -> BigQueryに移行した) <p>この記事は<a href="https://crieit.net/advent-calendars/2018/technology">個人開発サービスに用いられている技術 Advent Calendar 2018</a> の19日目です。</p> <p>昨日は<a target="_blank" rel="nofollow noopener" href="https://twitter.com/isaito24085408">@isaitoi</a>さんの「<a href="https://crieit.net/posts/Microsoft">Microsoftの技術でもちゃんとしたサービスを作れるんだぞ!!</a>」でした。</p> <hr /> <p>こんにちは、2z(Twitter: <a target="_blank" rel="nofollow noopener" href="https://twitter.com/2zn01">@2zn01</a> )です。</p> <p>普段は会社員でWeb系の開発エンジニアとして働き、週末に趣味で個人開発をしています。</p> <p>僕自身、普段あまり時間がない中でどう情報収集したらよいか困っているということもあり、エンジニアらしく技術で何とか解決するべく、ツイッターを活用し、エンジニアの情報収集を助けるキュレーションサービスを作ってみました。</p> <h2 id="作ったもの"><a href="#%E4%BD%9C%E3%81%A3%E3%81%9F%E3%82%82%E3%81%AE">作ったもの</a></h2> <p>ツイッターで話題になっている情報をジャンルごとにまとめる「ツイレポ」というサービスを作りました。</p> <p>■ツイレポ<br /> <a target="_blank" rel="nofollow noopener" href="https://twirepo.com/">https://twirepo.com/</a></p> <p><a href="https://crieit.now.sh/upload_images/8b8de3f71f6faf506a78c98c3c3c8ca65c198192823cd.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/8b8de3f71f6faf506a78c98c3c3c8ca65c198192823cd.png?mw=700" alt="twirepo_slide.png" /></a></p> <blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">【お知らせ】ツイッターを活用したエンジニアの情報収集を助けるキュレーションサービス <a target="_blank" rel="nofollow noopener" href="https://twitter.com/hashtag/%E3%83%84%E3%82%A4%E3%83%AC%E3%83%9D?src=hash&ref_src=twsrc%5Etfw">#ツイレポ</a> をリリースしました!🎉<a target="_blank" rel="nofollow noopener" href="https://t.co/oFiPYwT34N">https://t.co/oFiPYwT34N</a>時間がない中でどう情報収集したらよいか困っていたので、話題の情報のみをサクッと確認できるように作りました。ぜひ使ってみてください~! <a target="_blank" rel="nofollow noopener" href="https://t.co/DHVGfBC0BQ">pic.twitter.com/DHVGfBC0BQ</a></p>— 2z / AIメーカー開発 (@2zn01) <a target="_blank" rel="nofollow noopener" href="https://twitter.com/2zn01/status/1069286642765062144?ref_src=twsrc%5Etfw">2018年12月2日</a></blockquote> <p>画面イメージはこんな感じです。</p> <p><img width="400" alt="twirepo_screenshot1.png" src="https://qiita-image-store.s3.amazonaws.com/0/273248/657076e1-a42b-3f68-2ccf-6d7cdef4e9eb.png"></p> <p>「ツイレポ」では以下のジャンルごとに話題となっているツイートを見ることができます。</p> <ul> <li>トップ(ツイート)</li> <li>ニュース</li> <li>画像</li> <li>動画</li> <li>ライブ配信</li> <li>ネットメディア</li> <li>面白メディア</li> <li>エンタメ</li> <li>ライフスタイル</li> <li>女性向けメディア</li> <li>マーケティング</li> <li>スタートアップ</li> <li>ブログ</li> <li>イラスト</li> <li>いらすとや</li> <li>漫画</li> <li>本</li> <li>アニメ/ドラマ/映画</li> <li>音楽</li> <li>アプリ</li> <li>料理</li> <li>飲食店</li> <li>イベント</li> <li>まとめサイト</li> <li>プレスリリース</li> <li>はてブ</li> <li>NewsPicks</li> <li>note / cakes</li> <li>Voicy</li> <li>bouncy</li> <li>YouTube</li> <li>TikTok</li> <li>Amazon</li> <li>bosyu</li> <li>エンジニア求職</li> <li>GitHub</li> <li>Revue</li> <li>技術論文</li> <li>スライド</li> <li>Advent Calendar</li> <li>やってみた</li> <li>歌ってみた</li> <li>演奏してみた</li> <li>弾いてみた</li> <li>叩いてみた</li> <li>踊ってみた</li> <li>描いてみた</li> <li>作ってみた</li> <li>リリースした</li> </ul> <p>技術以外のジャンルもありますが、サービスを作り上げるエンジニアたる者、色んなジャンルにアンテナを張って様々な情報に触れる必要があると思うわけです。</p> <p>僕自身もアンテナを張りつつ、常に個人開発のサービスのアイディアに繋げられないかを考えていますので、このサービスによってその情報収集を楽にしたいと考えました。</p> <p>また、ジャンルごとに以下基準で並び替えを行い、ランキング形式で情報を確認することができます。</p> <ul> <li>リツイート数</li> <li>いいね数</li> <li>引用数</li> <li>リプライ数</li> <li>フォロワーのうち、リツイートしてくれた割合(リツイート数 / フォロワー数)</li> <li>フォロワーのうち、いいねしてくれた割合(いいね数 / フォロワー数)</li> <li>フォロワーのうち、引用してくれた割合(引用数 / フォロワー数)</li> <li>フォロワーのうち、リプライしてくれた割合(リプライ数 / フォロワー数)</li> </ul> <p><img width="485" alt="twirepo_screenshot_sort.png" src="https://qiita-image-store.s3.amazonaws.com/0/273248/f30d3ed4-99dd-fb8f-96e8-24f9112cad4a.png"></p> <h2 id="何で作ったの?"><a href="#%E4%BD%95%E3%81%A7%E4%BD%9C%E3%81%A3%E3%81%9F%E3%81%AE%EF%BC%9F">何で作ったの?</a></h2> <p>皆さんは情報収集って何でしていますか?</p> <p>GIGAZINE、ITmediaなどの様々なネットメディア、それからはてなブックマーク、技術記事であればQiita、はてなブログ、等々、あげると切りがありません。</p> <p>忙しいエンジニアにとっては、情報収集のためにすべてに目を通すのは難しいです。</p> <p>きちんと情報収集されている方だと、RSSリーダーなどを使って自分の欲しい情報を効率的に得ている人もいるかと思います。</p> <p>ただ、僕の場合、そこまでのことはやっておらず、はてなブックマークで話題になっている情報にさっと目を通して終わりというのがほとんどでした。</p> <p>少ない時間の中でいかに効率良く情報収集できるか、を解決するために、今回自分でサービスを作ってみることにしました。</p> <p>僕が目をつけたのは、ツイッターです。</p> <p>ツイッターは自分がフォローした人がつぶやいた情報を見ることができますが、タイムラインではすべてを追うのは難しいです。<br /> しかし、ツイートにはリツイート、いいね、リプライといった、他の人がつけた評価みたいなものがつけられています。</p> <p>リツイート数やいいね数が多いものほど、話題になっている情報ととらえることができます。<br /> この話題となっているツイートをキュレーションすることで、効率的に情報収集ができるのでは!? と考え、このサービスを作り始めました。</p> <h2 id="使用技術"><a href="#%E4%BD%BF%E7%94%A8%E6%8A%80%E8%A1%93">使用技術</a></h2> <h3 id="Linux"><a href="#Linux">Linux</a></h3> <p>クラウドのホスティングはGoogle Cloud Platformで、Google Compute Engine(GCE)でサーバを立てています。<br /> サーバのOSはLinuxでCentOSの7系を使っています。</p> <h3 id="Apache"><a href="#Apache">Apache</a></h3> <p>webサーバはApacheを使っています。<br /> Nginxもありますが、Apacheは普段から使っており、設定も把握していたため、いつも通りの安定の選択としました。</p> <h3 id="MySQL"><a href="#MySQL">MySQL</a></h3> <p>Amazon RDSを使ってMySQLを立てています。</p> <h3 id="BigQuery"><a href="#BigQuery">BigQuery</a></h3> <p>Google Cloud PlatformのBigQueryを使うようにしました。</p> <p>リリース後2週間ほどツイートを収集したら100万レコードを超えてしまい、応答速度的にも今後ヤバいな...ってなったので、BigQueryへデータを移行しました。</p> <p>BigQueryへの完全移行ではなく、MySQLとBigQueryのハイブリッド構成としました。</p> <p>移行については、この後ちょっと触れます。</p> <h3 id="PHP"><a href="#PHP">PHP</a></h3> <p>サーバ側のプログラムはPHPを使って実装しました。</p> <h3 id="jQuery"><a href="#jQuery">jQuery</a></h3> <p>クライアント側のJavaScriptは、jQueryを使って実装しました。</p> <h3 id="ツイッターAPI"><a href="#%E3%83%84%E3%82%A4%E3%83%83%E3%82%BF%E3%83%BCAPI">ツイッターAPI</a></h3> <p>ツイートの情報を取得するために使用しています。<br /> 使い方については、後述させて頂きます。</p> <h3 id="cron"><a href="#cron">cron</a></h3> <p>cronを使って定期的にバッチを走らせてツイートを収集しています。</p> <h2 id="MySQL -&gt; BigQueryへのデータ移行"><a href="#MySQL+-%26gt%3B+BigQuery%E3%81%B8%E3%81%AE%E3%83%87%E3%83%BC%E3%82%BF%E7%A7%BB%E8%A1%8C">MySQL -> BigQueryへのデータ移行</a></h2> <p><a target="_blank" rel="nofollow noopener" href="https://github.com/MemedDev/mysql-to-google-bigquery">mysql-to-google-bigquery</a> を使って、移行しました。</p> <p>要件としてはPHP 7以上である必要がありますが、使い方は超簡単です。</p> <p>①composerを使ってライブラリをダウンロード</p> <pre><code>$ composer require memeddev/mysql-to-google-bigquery </code></pre> <p>②プロジェクト直下に .env ファイルを用意し、以下の環境変数を設定する</p> <pre><code>BQ_PROJECT_ID=bigquery-project-id BQ_KEY_FILE=google-service-account-json-key-file.json BQ_DATASET=bigquery-dataset-name DB_DATABASE_NAME=mysql-database-name DB_USERNAME=mysql_username DB_PASSWORD=mysql_password DB_HOST=mysql-host </code></pre> <p>③MySQL -> BigQueryへのデータ同期を実行する</p> <pre><code>$ vendor/bin/console sync table-name --create-table </code></pre> <p>これだけでMySQLからBigQueryへデータを移行できちゃいます。</p> <h2 id="MySQLとBigQueryのハイブリッド構成"><a href="#MySQL%E3%81%A8BigQuery%E3%81%AE%E3%83%8F%E3%82%A4%E3%83%96%E3%83%AA%E3%83%83%E3%83%89%E6%A7%8B%E6%88%90">MySQLとBigQueryのハイブリッド構成</a></h2> <p>BigQueryにデータはすべて移行したんですが、BigQueryは保存しているデータ量およびクエリの検索対象となったデータ量をもとに課金され、検索対象のデータ量による課金が今後ヤバくなるのは目に見えているため、MySQLも使ったハイブリッド構成にしました。</p> <p>ツイートをジャンルごとにリツイート数などでソートして一覧を取得する部分は比較的DBに負荷がかかるため、BigQueryを使用しています。<br /> なお、ユニークIDからの単一のツイート取得はそれほどDBに負荷がかからないため、MySQLを使用しています。</p> <p>とはいえ、毎回一覧を取得するたびにBigQueryを呼び出すのも高くなっちゃうので、「ジャンルごと」 × 「ソートのオーダーごと」 × 「日ごと」でjsonファイルで分けて結果をキャッシュファイルとして保存するようにしました。</p> <p>jsonファイルがある場合はそのファイルからデータを取得し、jsonファイルがない場合はBigQueryを呼び出して結果を受け取り、jsonファイルへ保存するといった具合にしています。こうすることで、BigQueryによる検索量による課金地獄を回避しています(汗)、、クラウド破産こわい...><</p> <p>また、jsonファイルを保存する際には、単一のディレクトリに保存するのではなく、ファイル名をハッシュ化して先頭の2文字をとって、ディレクトリの階層を2つ作って保存しています。</p> <p>以下のような感じです。</p> <ul> <li>①news_retweet_20181219.json の場合、 「news_retweet_20181219」の文字をハッシュ化</li> <li>②ハッシュ化された先頭2文字がa, bだった場合、a/b/ の階層でディレクトリを作成</li> <li>③ a/b/news_retweet_20181209.json へjsonファイルを保存</li> </ul> <p>これは一つのディレクトリに1000個を超える大量のファイルを置くと、読み込み等のパフォーマンスに悪影響が出てしまうからです。</p> <h2 id="バズったツイートの可視化"><a href="#%E3%83%90%E3%82%BA%E3%81%A3%E3%81%9F%E3%83%84%E3%82%A4%E3%83%BC%E3%83%88%E3%81%AE%E5%8F%AF%E8%A6%96%E5%8C%96">バズったツイートの可視化</a></h2> <p>ツイートがバズった要因のようなものが少しでも可視化できたらと思い、以下に挙げたグラフを確認できるようにしてみました。</p> <p>各ジャンルごとに下部メニューのグラフアイコンをクリック、または各ツイートのインフォメーションアイコンをクリックするとみることができます。</p> <p><a href="https://crieit.now.sh/upload_images/b8e016c2ff6a2fbd426e8e3ff1ff13665c1981c7c124c.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/b8e016c2ff6a2fbd426e8e3ff1ff13665c1981c7c124c.png?mw=700" alt="twirepo_グラフ.png" /></a></p> <h3 id="リツイート数、いいね数の分布"><a href="#%E3%83%AA%E3%83%84%E3%82%A4%E3%83%BC%E3%83%88%E6%95%B0%E3%80%81%E3%81%84%E3%81%84%E3%81%AD%E6%95%B0%E3%81%AE%E5%88%86%E5%B8%83">リツイート数、いいね数の分布</a></h3> <p>ランキング100位までのツイートのリツイート数、いいね数を分布図で可視化しました。<br /> バズったツイートのリツイート数、いいね数の傾向を見ることができます。</p> <p><a href="https://crieit.now.sh/upload_images/432fb70049c10af4e6992197c428b0a85c1981dd59b29.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/432fb70049c10af4e6992197c428b0a85c1981dd59b29.png?mw=700" alt="twirepo_retweet.png" /></a></p> <h3 id="ツイートの時間帯"><a href="#%E3%83%84%E3%82%A4%E3%83%BC%E3%83%88%E3%81%AE%E6%99%82%E9%96%93%E5%B8%AF">ツイートの時間帯</a></h3> <p>ランキング100位までのツイートの時間帯を棒グラフで可視化しました。<br /> バズったツイートがどの時間帯でツイートされたかを見ることができます。</p> <p><a href="https://crieit.now.sh/upload_images/d2de452ea24d15b7dafc8c9a5cc079685c1981eabea58.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d2de452ea24d15b7dafc8c9a5cc079685c1981eabea58.png?mw=700" alt="twirepo_時間帯.png" /></a></p> <h3 id="ツイートの曜日・時間帯"><a href="#%E3%83%84%E3%82%A4%E3%83%BC%E3%83%88%E3%81%AE%E6%9B%9C%E6%97%A5%E3%83%BB%E6%99%82%E9%96%93%E5%B8%AF">ツイートの曜日・時間帯</a></h3> <p>ランキング100位までのツイートの曜日、時間帯をバブルチャートで可視化しました。<br /> バズったツイートがどの曜日、時間帯でツイートされたかを見ることができます。</p> <p><a href="https://crieit.now.sh/upload_images/f30a1b83dfd159ee5a902ffc35a5fee95c1981ff3000d.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/f30a1b83dfd159ee5a902ffc35a5fee95c1981ff3000d.png?mw=700" alt="twirepo_時間帯曜日.png" /></a></p> <h3 id="使われているワード"><a href="#%E4%BD%BF%E3%82%8F%E3%82%8C%E3%81%A6%E3%81%84%E3%82%8B%E3%83%AF%E3%83%BC%E3%83%89">使われているワード</a></h3> <p>ランキング100位までのツイートで使われているワードをワードクラウドで可視化しました。<br /> バズったツイートでは、どんなワードが使われているかを見ることができます。</p> <p><a href="https://crieit.now.sh/upload_images/9c71893e3478e448141b187906a1eb9b5c1982111e87d.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/9c71893e3478e448141b187906a1eb9b5c1982111e87d.png?mw=700" alt="twirepo_ワード.png" /></a></p> <h3 id="エンゲージメント数"><a href="#%E3%82%A8%E3%83%B3%E3%82%B2%E3%83%BC%E3%82%B8%E3%83%A1%E3%83%B3%E3%83%88%E6%95%B0">エンゲージメント数</a></h3> <p>当該ツイートのエンゲージメント数を棒グラフで可視化しました。</p> <p><a href="https://crieit.now.sh/upload_images/a8a275fac4951a3ce1bcf59b33c71e945c198227e3a27.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/a8a275fac4951a3ce1bcf59b33c71e945c198227e3a27.png?mw=700" alt="twirepo_エンゲージメント数.png" /></a></p> <h3 id="エンゲージメント率"><a href="#%E3%82%A8%E3%83%B3%E3%82%B2%E3%83%BC%E3%82%B8%E3%83%A1%E3%83%B3%E3%83%88%E7%8E%87">エンゲージメント率</a></h3> <p>当該ツイートのエンゲージメント率をアクティビティゲージグラフで可視化しました。<br /> フォロワーのうちの何%が反応してくれているかを見ることができます。</p> <p><a href="https://crieit.now.sh/upload_images/18c901f8ca942ac061acb3c38858c6255c1982383bde4.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/18c901f8ca942ac061acb3c38858c6255c1982383bde4.png?mw=700" alt="twirepo_エンゲージメント率.png" /></a></p> <h2 id="ツイッターAPI"><a href="#%E3%83%84%E3%82%A4%E3%83%83%E3%82%BF%E3%83%BCAPI">ツイッターAPI</a></h2> <p>ツイートはツイッターAPIを使って取得しています。</p> <h3 id="エンドポイント"><a href="#%E3%82%A8%E3%83%B3%E3%83%89%E3%83%9D%E3%82%A4%E3%83%B3%E3%83%88">エンドポイント</a></h3> <pre><code>GET [https://api.twitter.com/1.1/search/tweets.json](https://api.twitter.com/1.1/search/tweets.json) </code></pre> <h3 id="リクエストパラメータ"><a href="#%E3%83%AA%E3%82%AF%E3%82%A8%E3%82%B9%E3%83%88%E3%83%91%E3%83%A9%E3%83%A1%E3%83%BC%E3%82%BF">リクエストパラメータ</a></h3> <div class="table-responsive"><table> <thead> <tr> <th>パラメータ</th> <th>説明</th> </tr> </thead> <tbody> <tr> <td>q</td> <td>ツイートを検索するワード。検索演算子も利用できます</td> </tr> <tr> <td>geocode</td> <td>緯度,経度,範囲(半径)を指定。</td> </tr> <tr> <td>lang</td> <td>検索対象とする言語を指定。</td> </tr> <tr> <td>locale</td> <td>検索に使用する言語を指定。</td> </tr> <tr> <td>result_type</td> <td>ツイート結果をpopular(話題のツイート)、recent(最新のツイート)、mixed(すべてのツイート)の中から指定。</td> </tr> <tr> <td>count</td> <td>ツイートを取得する数を指定。</td> </tr> <tr> <td>until</td> <td>yyyy-mm-ddの形式で検索期間のエンドを指定。</td> </tr> <tr> <td>since_id</td> <td>検索対象とするツイートIDのスタートを指定。</td> </tr> <tr> <td>max_id</td> <td>検索対象とするツイートIDのエンドを指定。</td> </tr> <tr> <td>include_entities</td> <td>レスポンス値にentitiesプロパティを含めるかを指定</td> </tr> </tbody> </table></div> <p>また、上記のqパラメータには以下の検索演算子を使うことができます。<br /> これはツイッターの検索でも同様に使用できますので、ぜひお試しください。</p> <div class="table-responsive"><table> <thead> <tr> <th>検索演算子</th> <th>説明</th> </tr> </thead> <tbody> <tr> <td>min_retweets:○○</td> <td>リツイート数が○○以上のツイートを取得できます。</td> </tr> <tr> <td>min_faves:○○</td> <td>いいね数が○○以上のツイートを取得できます。</td> </tr> <tr> <td>min_replies:○○</td> <td>リプライ数が○○以上のツイートを取得できます。</td> </tr> <tr> <td>@○○</td> <td>○○(ユーザーID)さんに関するツイートを(ユーザーがしたツイートも、ユーザーへのリプライ、メンションも含め)取得できます。</td> </tr> <tr> <td>from:○○</td> <td>○○(ユーザーID)さんがしたツイートを取得できます。</td> </tr> <tr> <td>to:○○</td> <td>○○(ユーザーID)さんへのツイート(リプライ、メンション)を取得できます。</td> </tr> <tr> <td>since:yyyy-mm-dd</td> <td>yyyy年mm月dd日以降のツイートを取得できます。</td> </tr> <tr> <td>until::yyyy-mm-dd</td> <td>yyyy年mm月dd日までのツイートを取得できます。</td> </tr> <tr> <td>filter:images</td> <td>画像が含まれるツイートを取得できます。</td> </tr> <tr> <td>filter:videos</td> <td>動画が含まれるツイートを取得できます。</td> </tr> <tr> <td>filter:links</td> <td>リンクが含まれるツイートを取得できます。</td> </tr> <tr> <td>filter:news</td> <td>ニュースに関するツイートを取得できます。</td> </tr> <tr> <td>filter:periscope</td> <td>ライブ配信に関するツイートを取得できます。</td> </tr> <tr> <td>filter:verified</td> <td>認証アカウントのツイートを取得できます。</td> </tr> <tr> <td>filter:safe</td> <td>不適切でないツイートを取得できます。</td> </tr> <tr> <td>source:○○</td> <td>ツイートの投稿元(クライアント)を指定して取得することができます。○○には「Instagram」などが使えるようです。</td> </tr> <tr> <td>near:○○ within:××km</td> <td>○○の場所、半径××km以内でツイートされたものを取得できます。</td> </tr> <tr> <td>geocode:○○,△△,××km</td> <td>緯度○○、経度△△、半径××km以内でツイートされたものを取得できます。</td> </tr> <tr> <td>lang:○○</td> <td>ツイートの言語を指定して検索することができます。日本語の場合は「ja」を指定します。</td> </tr> <tr> <td>"○○ ××"</td> <td>「○○ ××」に完全一致したツイートのみ取得できます。</td> </tr> <tr> <td>:)</td> <td>ポジティブなツイートを取得できるみたいです。</td> </tr> <tr> <td>:(</td> <td>ネガティブなツイートを取得できるみたいです。</td> </tr> <tr> <td>-</td> <td>条件の先頭に「-」をつけると否定の条件にすることができます。これを使うことで除外したツイートを取得できます。</td> </tr> <tr> <td>OR</td> <td>通常は半角スペースで複数のワードを入力するとAND検索となりますが、ORを使うことでOR検索をすることができます。</td> </tr> </tbody> </table></div> <h2 id="ツイート収集対象と条件"><a href="#%E3%83%84%E3%82%A4%E3%83%BC%E3%83%88%E5%8F%8E%E9%9B%86%E5%AF%BE%E8%B1%A1%E3%81%A8%E6%9D%A1%E4%BB%B6">ツイート収集対象と条件</a></h2> <p>ツイートを取得する対象と条件について、以下にまとめてみます。<br /> なお、以下は各ジャンルごとの条件で、これに以下の流れで条件を追加して収集しています。</p> <ul> <li><ol> <li>リツイート数が 10000 または いいね数が 10000 のツイート収集(すべて収集したら次へ)</li> </ol></li> </ul> <p> ↓</p> <ul> <li><ol start="2"> <li>リツイート数が 1000 または いいね数が 1000 のツイート収集(すべて収集したら次へ)</li> </ol></li> </ul> <p> ↓</p> <ul> <li><ol start="3"> <li>リツイート数が 100 または いいね数が 100 のツイート収集(すべて収集したら次へ)</li> </ol></li> </ul> <p> ↓</p> <ul> <li><ol start="4"> <li>リツイート数が 10 または いいね数が 10 のツイート収集(すべて収集したら終わり)</li> </ol></li> </ul> <p>  ※リツイート数といいね数がともに10未満のツイートは収集していません</p> <h3 id="トップ"><a href="#%E3%83%88%E3%83%83%E3%83%97">トップ</a></h3> <pre><code>lang:ja -filter:verified </code></pre> <p>日本語のツイートをすべて取得します。<br /> ただし、フォロワー数が多く、リツイート数やいいね数が多くつく認証アカウントのツイートは除外しています。</p> <h3 id="ニュース"><a href="#%E3%83%8B%E3%83%A5%E3%83%BC%E3%82%B9">ニュース</a></h3> <pre><code>filter:news lang:ja </code></pre> <p>ニュースに関するツイートをすべて取得します。<br /> ニュースでは信頼性の高い認証アカウントのツイートも含めています。</p> <h3 id="画像"><a href="#%E7%94%BB%E5%83%8F">画像</a></h3> <pre><code>filter:images lang:ja -filter:verified </code></pre> <p>画像が含まれるツイートをすべて取得します。<br /> フォロワー数が多く、リツイート数やいいね数が多くつく認証アカウントのツイートは除外しています。</p> <h3 id="動画"><a href="#%E5%8B%95%E7%94%BB">動画</a></h3> <pre><code>filter:videos lang:ja -filter:verified </code></pre> <p>動画が含まれるツイートをすべて取得します。<br /> フォロワー数が多く、リツイート数やいいね数が多くつく認証アカウントのツイートは除外しています。</p> <h3 id="ライブ配信"><a href="#%E3%83%A9%E3%82%A4%E3%83%96%E9%85%8D%E4%BF%A1">ライブ配信</a></h3> <pre><code>filter:periscope lang:ja -filter:verified </code></pre> <p>ライブ配信に関するツイートをすべて取得します。<br /> フォロワー数が多く、リツイート数やいいね数が多くつく認証アカウントのツイートは除外しています。</p> <h3 id="ネットメディア"><a href="#%E3%83%8D%E3%83%83%E3%83%88%E3%83%A1%E3%83%87%E3%82%A3%E3%82%A2">ネットメディア</a></h3> <pre><code>(gigazine.net OR gizmodo.jp OR nlab.itmedia.co.jp OR rocketnews24.com OR getnews.jp OR wired.jp OR itmedia.co.jp OR ggsoku.com) filter:links lang:ja </code></pre> <p>以下メディアのリンクが含まれたツイートを取得します。</p> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://gigazine.net/">GIGAZINE</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://www.gizmodo.jp/">GIZMODO</a></li> <li><a target="_blank" rel="nofollow noopener" href="http://nlab.itmedia.co.jp/">ねとらぼ</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://rocketnews24.com/">ロケットニュース24</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://getnews.jp/">ガジェット通信</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://wired.jp/">WIRED</a></li> <li><a target="_blank" rel="nofollow noopener" href="http://www.itmedia.co.jp/">ITmedia</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://ggsoku.com/">ぐぐそく</a></li> </ul> <h3 id="面白メディア"><a href="#%E9%9D%A2%E7%99%BD%E3%83%A1%E3%83%87%E3%82%A3%E3%82%A2">面白メディア</a></h3> <pre><code>(omocoro.jp OR labaq.com OR dailyportalz.jp OR curazy.com) filter:links lang:ja </code></pre> <p>以下メディアのリンクが含まれたツイートを取得します。</p> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://omocoro.jp/">オモコロ</a></li> <li><a target="_blank" rel="nofollow noopener" href="http://labaq.com/">らばQ</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://dailyportalz.jp/">デイリーポータルZ</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://curazy.com/">クレイジー</a></li> </ul> <h3 id="エンタメ"><a href="#%E3%82%A8%E3%83%B3%E3%82%BF%E3%83%A1">エンタメ</a></h3> <pre><code>(oricon.co.jp OR mantan+web.jp OR nikkan*spa.jp OR wpb.shueisha.co.jp OR narinari.com OR news.mynavi.jp OR cinra.net OR rockinon.com) filter:links lang:ja </code></pre> <p>※半角ハイフン「-」がURLに含まれると、うまく検索できないケースがあったため、「+」や「*」に置き換えているものがあります。</p> <p>以下メディアのリンクが含まれたツイートを取得します。</p> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://www.oricon.co.jp/">ORICON NEWS</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://mantan-web.jp/">MANTANWEB(まんたんウェブ)</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://nikkan-spa.jp/">日刊SPA!</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://wpb.shueisha.co.jp/">週プレNEWS</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://www.narinari.com/">ナリナリドットコム</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://news.mynavi.jp/">マイナビニュース</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://www.cinra.net/">CINRA.NET</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://rockinon.com/">rockinon.com(ロッキング・オン ドットコム)</a></li> </ul> <h3 id="ライフスタイル"><a href="#%E3%83%A9%E3%82%A4%E3%83%95%E3%82%B9%E3%82%BF%E3%82%A4%E3%83%AB">ライフスタイル</a></h3> <pre><code>(nanapi.jp OR enuchi.jp OR locari.jp OR sheage.jp) filter:links lang:ja </code></pre> <p>以下メディアのリンクが含まれたツイートを取得します。</p> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://nanapi.jp/">nanapi</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://enuchi.jp/">えんウチ</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://locari.jp/">LOCARI</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://sheage.jp/">Sheage</a></li> </ul> <h3 id="女性向けメディア"><a href="#%E5%A5%B3%E6%80%A7%E5%90%91%E3%81%91%E3%83%A1%E3%83%87%E3%82%A3%E3%82%A2">女性向けメディア</a></h3> <pre><code>(men-joy.jp OR mainichikirei.jp OR otajo.jp OR youpouch.com OR mdpr.jp OR japan.techinsight.jp) filter:links lang:ja </code></pre> <p>以下メディアのリンクが含まれたツイートを取得します。</p> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://www.men-joy.jp/">Menjoy!</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://mainichikirei.jp/">毎日キレイ</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://otajo.jp/">オタ女</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://youpouch.com/">Pouch</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://mdpr.jp/">モデルプレス</a></li> <li><a target="_blank" rel="nofollow noopener" href="http://japan.techinsight.jp/">Techinsight</a></li> </ul> <h3 id="マーケティング"><a href="#%E3%83%9E%E3%83%BC%E3%82%B1%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0">マーケティング</a></h3> <pre><code>(liginc.co.jp OR bazubu.com OR ferret-plus.com OR seojapan.com OR webtan.impress.co.jp OR liskul.com OR gaiax-socialmedialab.jp OR seolaboratory.jp OR smmlab.jp OR dmlab.jp OR promonista.com OR cont+hub.com) filter:links lang:ja </code></pre> <p>※半角ハイフン「-」がURLに含まれると、うまく検索できないケースがあったため、「+」や「*」に置き換えているものがあります。</p> <p>以下メディアのリンクが含まれたツイートを取得します。</p> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://liginc.co.jp/">LIG</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://bazubu.com/">バズ部</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://ferret-plus.com/">ferret</a></li> <li><a target="_blank" rel="nofollow noopener" href="http://www.seojapan.com/blog/">SEO Japan</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://webtan.impress.co.jp/">Web担当者Forum</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://liskul.com/">LISKUL</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://gaiax-socialmedialab.jp/">ソーシャルメディアラボ</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://seolaboratory.jp/">SEOラボ</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://smmlab.jp/">SMMLab</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://dmlab.jp/">デジタルマーケティングラボ</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://promonista.com/">プロモニスタ</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://cont-hub.com/">コンテンツハブ</a></li> </ul> <h3 id="スタートアップ"><a href="#%E3%82%B9%E3%82%BF%E3%83%BC%E3%83%88%E3%82%A2%E3%83%83%E3%83%97">スタートアップ</a></h3> <pre><code>(japan.cnet.com OR jp.techcrunch.com OR thebridge.jp OR techwave.jp OR techable.jp OR thestartup.jp OR turnyourideasintoreality.com) filter:links lang:ja </code></pre> <p>以下メディアのリンクが含まれたツイートを取得します。</p> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://japan.cnet.com/">CNET Japan</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://jp.techcrunch.com/">TechCrunch Japan</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://thebridge.jp/">THE BRIDGE</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://techwave.jp/">TechWave</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://techable.jp/">TECHABLE</a></li> <li><a target="_blank" rel="nofollow noopener" href="http://thestartup.jp/">THE STARTUP</a></li> <li><a target="_blank" rel="nofollow noopener" href="http://turnyourideasintoreality.com/">TURN YOUR IDEAS INTO REALITY.</a></li> </ul> <h3 id="ブログ"><a href="#%E3%83%96%E3%83%AD%E3%82%B0">ブログ</a></h3> <pre><code>(hatenablog.com OR hatenablog.jp OR hateblo.jp OR hatenadiary.com OR hatenadiary.jp OR ameblo.jp OR blog.livedoor.jp OR medium.com OR blogos.com OR blogger.com OR exblog.jp OR cocolog-nifty.com) filter:links lang:ja </code></pre> <p>以下ブログのリンクが含まれたツイートを取得します。</p> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://hatenablog.com/">はてなブログ</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://ameblo.jp/">アメーバブログ</a></li> <li><a target="_blank" rel="nofollow noopener" href="http://blog.livedoor.com/">ライブドアブログ</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://medium.com/">Medium</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://blogos.com/">BLOGOS</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://www.blogger.com/">Blogger</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://www.exblog.jp/">エキサイトブログ</a></li> <li><a target="_blank" rel="nofollow noopener" href="http://www.cocolog-nifty.com/">ココログ</a></li> </ul> <h3 id="イラスト"><a href="#%E3%82%A4%E3%83%A9%E3%82%B9%E3%83%88">イラスト</a></h3> <pre><code>(#pixiv OR pixivision) filter:images lang:ja </code></pre> <p>以下ワードのリンクが含まれたツイートを取得します。</p> <ul> <li>#pixiv</li> <li>pixivision</li> </ul> <h3 id="いらすとや"><a href="#%E3%81%84%E3%82%89%E3%81%99%E3%81%A8%E3%82%84">いらすとや</a></h3> <pre><code>irasutoya.com filter:images lang:ja </code></pre> <p>以下サイトの画像が含まれたツイートを取得します。</p> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://www.irasutoya.com/">いらすとや</a></li> </ul> <h3 id="漫画"><a href="#%E6%BC%AB%E7%94%BB">漫画</a></h3> <pre><code>(mangaz.com OR sukima.me OR bookstore.yahoo.co.jp OR comic-walker.com OR manga-bang.com OR #pixivコミック OR manga-zero.com OR cmoa.jp OR sokuyomi.jp OR renta.papy.co.jp OR mangabox.me OR comico.jp OR dokuha.jp OR comic-meteor.jp OR mangag.com OR comic-polaris.jp) </code></pre> <p>以下サイトのリンクが含まれたツイートを取得します。</p> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://www.mangaz.com/">マンガ図書館Z</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://www.sukima.me/">スキマ</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://bookstore.yahoo.co.jp/">Yahoo!ブックストア</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://comic-walker.com/">コミックウォーカー</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://manga-bang.com/">マンガBANG!</a></li> <li>#pixivコミック</li> <li><a target="_blank" rel="nofollow noopener" href="https://manga-zero.com/">マンガZERO</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://www.cmoa.jp/">コミックシーモア</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://sokuyomi.jp/">ソク読み</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://renta.papy.co.jp/">Renta!</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://www.mangabox.me/">マンガボックス</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://www.comico.jp/">comico</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://dokuha.jp/">マンガ読破!EX</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://comic-meteor.jp/">COMICメテオ</a></li> <li><a target="_blank" rel="nofollow noopener" href="http://mangag.com/">マンガごっちゃ</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://comic-polaris.jp/">COMICポラリス</a></li> </ul> <h3 id="本"><a href="#%E6%9C%AC">本</a></h3> <pre><code>(bookmeter.com OR booklog.jp OR honz.jp OR sinkan.jp OR flierinc.com OR bijodoku.com OR bizpow.bizocean.jp OR bukupe.com OR bookvinegar.jp OR book-smart.jp OR booklog.kinokuniya.co.jp) filter:links lang:ja </code></pre> <p>以下サイトのリンクが含まれたツイートを取得します。</p> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://bookmeter.com/">読書メーター</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://booklog.jp/">ブクログ</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://honz.jp/">HONZ</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://www.sinkan.jp/">新刊JP</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://www.flierinc.com/">flier(フライヤー)</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://bijodoku.com/">美女読書</a></li> <li><a target="_blank" rel="nofollow noopener" href="http://bizpow.bizocean.jp/">Bizpow</a></li> <li><a target="_blank" rel="nofollow noopener" href="http://bukupe.com/">ブクペ</a></li> <li><a target="_blank" rel="nofollow noopener" href="http://bookvinegar.jp/">bookvinegar(ブックビネガー)</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://book-smart.jp/">BOOK-SMART</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://booklog.kinokuniya.co.jp/">書評空間::紀伊國屋書店</a></li> </ul> <h3 id="アニメ/ドラマ/映画"><a href="#%E3%82%A2%E3%83%8B%E3%83%A1%2F%E3%83%89%E3%83%A9%E3%83%9E%2F%E6%98%A0%E7%94%BB">アニメ/ドラマ/映画</a></h3> <pre><code>(gyao.yahoo.co.jp OR anime.nicovideo.jp OR abema.tv OR fod.fujitv.co.jp OR cu.ntv.co.jp OR videomarket.jp OR tver.jp OR freshlive.tv) filter:links lang:ja </code></pre> <p>以下サイトのリンクが含まれたツイートを取得します。</p> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://gyao.yahoo.co.jp/">GYAO!</a></li> <li><a target="_blank" rel="nofollow noopener" href="http://anime.nicovideo.jp/">Nアニメ</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://abema.tv/">AmebaTV</a></li> <li><a target="_blank" rel="nofollow noopener" href="http://fod.fujitv.co.jp/s/">FOD</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://cu.ntv.co.jp/">日テレオンデマンド</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://www.videomarket.jp/">VideoMarket</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://tver.jp/">TVer</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://freshlive.tv/">FRESH LIVE</a></li> </ul> <h3 id="音楽"><a href="#%E9%9F%B3%E6%A5%BD">音楽</a></h3> <pre><code>spotify.com filter:links lang:ja </code></pre> <p>以下サイトのリンクが含まれたツイートを取得します。</p> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://www.spotify.com/">Spotify</a></li> </ul> <h3 id="アプリ"><a href="#%E3%82%A2%E3%83%97%E3%83%AA">アプリ</a></h3> <pre><code>(itunes.apple.com OR play.google.com) filter:links lang:ja </code></pre> <p>以下サイトのリンクが含まれたツイートを取得します。</p> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://itunes.apple.com/">iTunes</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://play.google.com/store">Google Play</a></li> </ul> <h3 id="料理"><a href="#%E6%96%99%E7%90%86">料理</a></h3> <pre><code>(cookpad.com OR kurashiru.com) filter:links lang:ja </code></pre> <p>以下サイトのリンクが含まれたツイートを取得します。</p> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://cookpad.com/">クックパッド</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://www.kurashiru.com/">kurashiru(クラシル)</a></li> </ul> <h3 id="飲食店"><a href="#%E9%A3%B2%E9%A3%9F%E5%BA%97">飲食店</a></h3> <pre><code>(tabelog.com OR gnavi.co.jp OR retty.me OR hotpepper.jp OR hitosara.com) filter:links lang:ja </code></pre> <p>以下サイトのリンクが含まれたツイートを取得します。</p> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://tabelog.com/">食べログ</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://www.gnavi.co.jp/">ぐるなび</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://retty.me/">Retty</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://www.hotpepper.jp/">ホットペッパーグルメ</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://hitosara.com/">ヒトサラ</a></li> </ul> <h3 id="イベント"><a href="#%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88">イベント</a></h3> <pre><code>(doorkeeper.jp OR connpass.com OR peatix.com OR atnd.org) filter:links lang:ja </code></pre> <p>以下サイトのリンクが含まれたツイートを取得します。</p> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://www.doorkeeper.jp/">Doorkeeper</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://connpass.com/">connpass</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://peatix.com/">Peatix</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://atnd.org/">ATND</a></li> </ul> <h3 id="まとめサイト"><a href="#%E3%81%BE%E3%81%A8%E3%82%81%E3%82%B5%E3%82%A4%E3%83%88">まとめサイト</a></h3> <pre><code>(togetter.com OR matome.naver.jp) filter:links lang:ja </code></pre> <p>以下サイトのリンクが含まれたツイートを取得します。</p> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://togetter.com/">Togetter</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://matome.naver.jp/">NAVERまとめ</a></li> </ul> <h3 id="プレスリリース"><a href="#%E3%83%97%E3%83%AC%E3%82%B9%E3%83%AA%E3%83%AA%E3%83%BC%E3%82%B9">プレスリリース</a></h3> <pre><code>prtimes.jp filter:links lang:ja </code></pre> <p>以下メディアのリンクが含まれたツイートを取得します。</p> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://prtimes.jp/">PR TIMES</a></li> </ul> <h3 id="はてブ"><a href="#%E3%81%AF%E3%81%A6%E3%83%96">はてブ</a></h3> <pre><code>b.hatena.ne.jp filter:links lang:ja </code></pre> <p>以下サイトのリンクが含まれたツイートを取得します。</p> <ul> <li><a target="_blank" rel="nofollow noopener" href="http://b.hatena.ne.jp/">はてなブックマーク</a></li> </ul> <h3 id="NewsPicks"><a href="#NewsPicks">NewsPicks</a></h3> <pre><code>newspicks.com filter:links lang:ja </code></pre> <p>以下メディアのリンクが含まれたツイートを取得します。</p> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://newspicks.com/">NewsPicks</a></li> </ul> <h3 id="note / cakes"><a href="#note+%2F+cakes">note / cakes</a></h3> <pre><code>(note.mu OR cakes.mu) filter:links lang:ja </code></pre> <p>以下メディアのリンクが含まれたツイートを取得します。</p> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://note.mu/">note</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://cakes.mu/">cakes</a></li> </ul> <h3 id="Voicy"><a href="#Voicy">Voicy</a></h3> <pre><code>voicy.jp filter:links lang:ja </code></pre> <p>以下メディアのリンクが含まれたツイートを取得します。</p> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://voicy.jp/">Voicy</a></li> </ul> <h3 id="bouncy"><a href="#bouncy">bouncy</a></h3> <pre><code>bouncy.news filter:videos lang:ja </code></pre> <p>以下メディアの動画が含まれたツイートを取得します。</p> <ul> <li><a target="_blank" rel="nofollow noopener" href="http://bouncy.news/">bouncy</a></li> </ul> <h3 id="YouTube"><a href="#YouTube">YouTube</a></h3> <pre><code>(youtu.be OR youtube.com) filter:links lang:ja </code></pre> <p>以下メディアの動画が含まれたツイートを取得します。</p> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://www.youtube.com/">YouTube</a></li> </ul> <h3 id="TikTok"><a href="#TikTok">TikTok</a></h3> <pre><code>TikTok filter:videos lang:ja </code></pre> <p>以下ワードの動画が含まれたツイートを取得します。</p> <ul> <li>TikTok</li> </ul> <h3 id="Amazon"><a href="#Amazon">Amazon</a></h3> <pre><code>(amazon.co.jp OR amzn.to) filter:links lang:ja </code></pre> <p>以下サイトのリンクが含まれたツイートを取得します。</p> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://www.amazon.co.jp/">Amazon</a></li> </ul> <h3 id="bosyu"><a href="#bosyu">bosyu</a></h3> <pre><code>bosyu.me filter:links lang:ja </code></pre> <p>以下サイトのリンクが含まれたツイートを取得します。</p> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://bosyu.me/">bosyu</a></li> </ul> <h3 id="エンジニア求職"><a href="#%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E6%B1%82%E8%81%B7">エンジニア求職</a></h3> <pre><code>#hiyokonitsuduke OR #Twitter転職 lang:ja </code></pre> <p>以下ワードのツイートを取得します。</p> <ul> <li>#hiyokonitsuduke</li> <li>#Twitter転職</li> </ul> <h3 id="GitHub"><a href="#GitHub">GitHub</a></h3> <pre><code>(github.com OR c) filter:links lang:ja </code></pre> <p>以下サイトのリンクが含まれたツイートを取得します。</p> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://github.com/">GitHub</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://pages.github.com/">GitHub Pages</a></li> </ul> <h3 id="Revue"><a href="#Revue">Revue</a></h3> <pre><code>getrevue.co filter:links lang:ja </code></pre> <p>以下サイトのリンクが含まれたツイートを取得します。</p> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://www.getrevue.co/">Revue</a></li> </ul> <h3 id="技術論文"><a href="#%E6%8A%80%E8%A1%93%E8%AB%96%E6%96%87">技術論文</a></h3> <pre><code>arxiv.org filter:links lang:ja </code></pre> <p>以下サイトのリンクが含まれたツイートを取得します。</p> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://arxiv.org/">arXiv.org</a></li> </ul> <h3 id="技術記事"><a href="#%E6%8A%80%E8%A1%93%E8%A8%98%E4%BA%8B">技術記事</a></h3> <pre><code>(qiita.com OR qrunch.io OR #Crieit) filter:links lang:ja </code></pre> <p>以下サイトのリンクが含まれたツイートを取得します。</p> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://qiita.com/">Qiita</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://qrunch.io/">Qrunch</a></li> <li>#Crieit</li> </ul> <h3 id="スライド"><a href="#%E3%82%B9%E3%83%A9%E3%82%A4%E3%83%89">スライド</a></h3> <pre><code>(slideshare.net OR speakerdeck.com) filter:links lang:ja </code></pre> <p>以下サイトのリンクが含まれたツイートを取得します。</p> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://www.slideshare.net/">SlideShare</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://speakerdeck.com/">Speaker Deck</a></li> </ul> <h3 id="Advent Calendar"><a href="#Advent+Calendar">Advent Calendar</a></h3> <pre><code>Advent Calendar filter:links lang:ja </code></pre> <p>以下ワードのリンクが含まれたツイートを取得します。</p> <ul> <li>Advent Calendar</li> </ul> <h3 id="やってみた"><a href="#%E3%82%84%E3%81%A3%E3%81%A6%E3%81%BF%E3%81%9F">やってみた</a></h3> <pre><code>(やってみた OR やってみました) filter:videos lang:ja -filter:verified </code></pre> <p>以下ワードの動画が含まれたツイートを取得します。</p> <ul> <li>やってみた</li> <li>やってみました</li> </ul> <h3 id="歌ってみた"><a href="#%E6%AD%8C%E3%81%A3%E3%81%A6%E3%81%BF%E3%81%9F">歌ってみた</a></h3> <pre><code>(歌ってみた OR 歌ってみました) filter:videos lang:ja -filter:verified </code></pre> <p>以下ワードの動画が含まれたツイートを取得します。</p> <ul> <li>歌ってみた</li> <li>歌ってみました</li> </ul> <h3 id="演奏してみた"><a href="#%E6%BC%94%E5%A5%8F%E3%81%97%E3%81%A6%E3%81%BF%E3%81%9F">演奏してみた</a></h3> <pre><code>(演奏してみた OR 演奏してみました) filter:videos lang:ja -filter:verified </code></pre> <p>以下ワードの動画が含まれたツイートを取得します。</p> <ul> <li>演奏してみた</li> <li>演奏してみました</li> </ul> <h3 id="弾いてみた"><a href="#%E5%BC%BE%E3%81%84%E3%81%A6%E3%81%BF%E3%81%9F">弾いてみた</a></h3> <pre><code>(弾いてみた OR 弾いてみました) filter:videos lang:ja -filter:verified </code></pre> <p>以下ワードの動画が含まれたツイートを取得します。</p> <ul> <li>弾いてみた</li> <li>弾いてみました</li> </ul> <h3 id="叩いてみた"><a href="#%E5%8F%A9%E3%81%84%E3%81%A6%E3%81%BF%E3%81%9F">叩いてみた</a></h3> <pre><code>(叩いてみた OR 叩いてみました) filter:videos lang:ja -filter:verified </code></pre> <p>以下ワードの動画が含まれたツイートを取得します。</p> <ul> <li>叩いてみた</li> <li>叩いてみました</li> </ul> <h3 id="踊ってみた"><a href="#%E8%B8%8A%E3%81%A3%E3%81%A6%E3%81%BF%E3%81%9F">踊ってみた</a></h3> <pre><code>(踊ってみた OR 踊ってみました) filter:videos lang:ja -filter:verified </code></pre> <p>以下ワードの動画が含まれたツイートを取得します。</p> <ul> <li>踊ってみた</li> <li>踊ってみました</li> </ul> <h3 id="描いてみた"><a href="#%E6%8F%8F%E3%81%84%E3%81%A6%E3%81%BF%E3%81%9F">描いてみた</a></h3> <pre><code>(描いてみた OR 描いてみました) filter:images lang:ja -filter:verified </code></pre> <p>以下ワードの画像が含まれたツイートを取得します。</p> <ul> <li>描いてみた</li> <li>描いてみました</li> </ul> <h3 id="作ってみた"><a href="#%E4%BD%9C%E3%81%A3%E3%81%A6%E3%81%BF%E3%81%9F">作ってみた</a></h3> <p>```(作ってみた OR 作ってみました OR 作りました OR つくってみた OR つくってみました OR つくりました) (filter:links OR filter:media) lang:ja -filter:verified</p> <pre><code><br />以下ワードのリンク、画像、動画が含まれたツイートを取得します。 * 作ってみた * 作ってみました * 作りました * つくってみた * つくってみました * つくりました ### リリースした </code></pre> <p>(リリースしました OR 開発しました OR Webサービス OR webサービス) (filter:links OR filter:media) lang:ja -filter:verified<br /> ```</p> <p>以下ワードのリンク、画像、動画が含まれたツイートを取得します。</p> <ul> <li>リリースしました</li> <li>開発しました</li> <li>Webサービス</li> <li>webサービス</li> </ul> <h2 id="まとめ"><a href="#%E3%81%BE%E3%81%A8%E3%82%81">まとめ</a></h2> <p>今回は各ジャンルごとに話題のツイートを収集し、ランキングで表示するところまで実装しました。</p> <p><img width="400" alt="twirepo_screenshot1.png" src="https://qiita-image-store.s3.amazonaws.com/0/273248/657076e1-a42b-3f68-2ccf-6d7cdef4e9eb.png"></p> <p>作ってみて感じたのは、ジャンルによってはまだまだ収集したツイートの精度があまり良くなかったことです。<br /> ツイートにつけられたリツイート数やいいね数での評価だけでは、自分の望む精度の高い情報にはまだ及びませんでした。</p> <p>今後の課題としては、情報の精度をリツイート数やいいね数といったツイートの評価の他に「ツイレポ」のサービス内で改善できそうな点を考えていきたいと思います。<br /> また、今回の実装でリツイート数やいいね数は収集してるので、これを使ってツイートがバズる要因や傾向なども分析していければと考えています。</p> <p>なお、今回、ジャンル分けやその収集対象は自分の独断と偏見で決めてしまっていますので、これを入れたらいいんじゃないか、これを入れて欲しいなどのご要望がありましたら、「ツイレポ」のご意見・ご要望よりご連絡を頂ければ幸いです。</p> <p><img width="406" alt="twirepo_screenshot_contact.png" src="https://qiita-image-store.s3.amazonaws.com/0/273248/0f9382db-b2ce-04ed-9923-339315a55781.png"></p> <p>本サービスに少しでも興味をもって頂けましたら、ぜひ 本記事のいいね や Twitterのフォロー、いいねやリツイートをして頂けると嬉しいです!</p> <ul> <li>Twitter: <a target="_blank" rel="nofollow noopener" href="https://twitter.com/2zn01">@2zn01</a></li> </ul> <blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">【お知らせ】ツイッターを活用したエンジニアの情報収集を助けるキュレーションサービス <a target="_blank" rel="nofollow noopener" href="https://twitter.com/hashtag/%E3%83%84%E3%82%A4%E3%83%AC%E3%83%9D?src=hash&ref_src=twsrc%5Etfw">#ツイレポ</a> をリリースしました!🎉<a target="_blank" rel="nofollow noopener" href="https://t.co/oFiPYwT34N">https://t.co/oFiPYwT34N</a>時間がない中でどう情報収集したらよいか困っていたので、話題の情報のみをサクッと確認できるように作りました。ぜひ使ってみてください~! <a target="_blank" rel="nofollow noopener" href="https://t.co/DHVGfBC0BQ">pic.twitter.com/DHVGfBC0BQ</a></p>— 2z / AIメーカー開発 (@2zn01) <a target="_blank" rel="nofollow noopener" href="https://twitter.com/2zn01/status/1069286642765062144?ref_src=twsrc%5Etfw">2018年12月2日</a></blockquote> <p>ぜひこのサービスを使って情報収集してみてください!</p> <p>■ツイレポ<br /> <a target="_blank" rel="nofollow noopener" href="https://twirepo.com/">https://twirepo.com/</a></p> <hr /> <p>明日は<a target="_blank" rel="nofollow noopener" href="https://twitter.com/Fujiyama_Yuta">@Fujiyama_Yuta</a>さんの「今作っているサービスを、この日までにリリースして記事を書きます!」です。</p> <p>お楽しみに!</p> 2z@AIメーカー