はじめに
埋め込みツイートの表示をするにあたり、公式の埋め込みツイートを使おうと思ったのですが、なぜかVueで<script>
が動きませんでした。原因を調べてもいまいちわからなかったので、自作したほうが早いのではないかと思いました。
一応、Vuetifyにも「Twitter card」というものはあったのですが……なんか違う。
というわけで、v-cardを基本にそれっぽいレイアウトにしてみました。
つくるもの
こんな感じのツイート風コンポーネントです。
See the Pen Oembed Tweet by END (@aiandrox) on CodePen.
環境
- Vue.js 2.6.11
- Vuetify 2.2.21
- Material Design Icon 5.1.45
アイコンは別のものでも代用可能だと思います。Twitterアイコン、リプライ、リツイート、いいねで使用しています。
使用データ
サンプルコードでは以下のようにデータをネストしています。
- tweet
- tweetId(ツイートのID)
- html(本文部分のHTML)
- tweetedAt(ツイート日時)
- user
- name(表示名)
- screenName(
@screen_name
のユーザー名) - avatarUrl(アイコンの画像URL)
htmlはGET statuses/oembedで取得した埋め込みツイート用のHTMLから<p>
タグの内側を抜き出して利用しました。
日時はDay.jsなどを使ってフォーマットを整えることをおすすめします。
ツイート表示の規定
Twitterの埋め込みツイートには表示の規定があるので、それに従ってカードを作成します。
こちらのDisplay requirements – Twitter DevelopersをざっくりGoogle意訳しました。間違っていたらご指摘をお願いします。
- 実際のアカウントによる変更を加えられていないツイートを表示すること。
- 公式ツイッターロゴを表示すること。
- 個々のツイートの右上隅に表示するか、タイムラインに直接添付すること。
- ロゴは、画像と同じ高さにすること。
- 作成者のプロフィール画像、@ユーザーネーム、表示名を常に表示し、Twitterプロフィールページにリンクさせること。
- @ユーザーネームは
@
を用いて表示すること。 - プロフィール画像は、表示名と@ユーザーネームの左側に配置すること(ただし右から左に読む言語のツイートは例外)
- ツイートのテキストは作成者の表示名と@ユーザーネームの下の行に表示すること。
- ツイートのテキストと作成者の周りのスペースはツイートのパーマリンクにリンクさせること。
- テキスト内のツイートエンティティは、Twitter上の適切なホームに適切にリンクすること。
@ユーザーネーム
によるメンションは言及されたユーザーのプロフィールページにリンクすること。- ハッシュタグは、ハッシュタグをクエリとしてTwitter検索にリンクすること。
- テキスト内のリンクは、URL entities APIにおけるdisplay_urlを表示し、元のt.co urlにリンクすること(詳細はt.co best practices articleを参照)
- ツイートのタイムスタンプを表示し、ツイートのパーマリンクにリンクすること。
- プラットフォームに存在しないツイートのモックアップを使用しないこと。
コード
CodePenの方はそれだけで完結するようにしています。
こちらのコードはコンポーネント用のコードです。
|
|
おわりに
プロフィールのリンクの範囲が気になりますが、これで妥協点とします。
もっといい感じにできそうなら踏み台にしていただきたいです。