読者です 読者をやめる 読者になる 読者になる

Hiroto's diary

プログラミング関連を書くかも

twitter-textを軽く使ってみる

TwitterではURLが全てt.coに短縮されてURLで140文字を超えても合計140文字以上ツイート出来るようになっています。ただこのバリデーションを自分で作るのは面倒だし正確である保証がありません。

そこで便利なのがTwitter公式で提供しているライブラリ、twitter-textです。このライブラリではURLの自動リンク、ツイート数の正確なカウント等面倒な処理を全てしてくれます。hk_sub_でもこのライブラリを使っています。

ここではRuby版のtwitter-textを使う説明をします。(Ruby以外にもJava,Obj-C,JavaScriptがあります。)

インストール

RubyGemsにあるので

$ gem install twitter-text

でインストールできます。既存のプロジェクトに組込む場合はGemfileに

gem "twitter-text"

を追加して

$ bundle install

しましょう。

インストールが出来たらrequire "twitter-text"でライブラリを読み込んで起動しましょう。

使用法

文字数カウント

バリデーション関係はTwitter::Validationで定義されています。

以下の文字列の文字数は140文字を超えていますが実際Twitterに投稿すると63字になります。

text = "これはテスト用のツイートです。 https://github.com/Hiroto-K/HkApps/blob/master/app/Http/Controllers/Api/PasteBinsController.php#L10 https://github.com/Hiroto-K/HkApps/blob/master/app/Http/Controllers/Api/MemosController.php"
p text.length
# => 207

twitter-textを使って正確にカウントしてみます。

text = "これはテスト用のツイートです。 https://github.com/Hiroto-K/HkApps/blob/master/app/Http/Controllers/Api/PasteBinsController.php#L10 https://github.com/Hiroto-K/HkApps/blob/master/app/Http/Controllers/Api/MemosController.php"
p text.length
# => 207
p Twitter::Validation.tweet_length(text)
# => 63

これで文字数の正確なカウントが出来ます。

自動リンク

自動リンク関係はTwitter::Autolinkで定義されています。

文字数カウントに使った文字列を自動リンクしてみたいと思います。

text = "これはテスト用のツイートです。 https://github.com/Hiroto-K/HkApps/blob/master/app/Http/Controllers/Api/PasteBinsController.php#L10 https://github.com/Hiroto-K/HkApps/blob/master/app/Http/Controllers/Api/MemosController.php"
p Twitter::Autolink.auto_link(text)
# => "これはテスト用のツイートです。 <a href="https://github.com/Hiroto-K/HkApps/blob/master/app/Http/Controllers/Api/PasteBinsController.php#L10" rel="nofollow">https://github.com/Hiroto-K/HkApps/blob/master/app/Http/Controllers/Api/PasteBinsController.php#L10</a> <a href="https://github.com/Hiroto-K/HkApps/blob/master/app/Http/Controllers/Api/MemosController.php" rel="nofollow">https://github.com/Hiroto-K/HkApps/blob/master/app/Http/Controllers/Api/MemosController.php</a>"