Hiroto's diary

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

Twitterで280文字のツイートをする

Twitterは9月26日に、ツイート可能な文字数を140文字から280文字に増やすための実験を開始すると発表。

blog.twitter.com

しかし、対象ユーザーは無作為に選ばれる上に日本語, 中国語, 韓国語は対象ではありません

APIにパラメータをつければ誰でも280文字ツイートが出来たので280文字投稿の方法を紹介。

この記事ではPHPCowitterを用いて投稿しますが、他の言語やライブラリでもパラメーターをつければ投稿可能です。

280文字の投稿方法

簡単に言ってしまうとツイートを投稿するAPIであるstatuses/updateを叩く際、パラメーターにweighted_character_count=trueを付ければ投稿可能です。

とりあえずサンプルコードを書いてみます。

<?php

require __DIR__."/vendor/autoload.php";

use mpyw\Cowitter\Client as CowitterClient;

// ランダムな文字列を生成。
function rand_str($len = 10) {
    $chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJLKMNOPQRSTUVWXYZ0123456789';
    $str = '';
    for ($i = 0; $i < $len; ++$i) {
        $str .= $chars[mt_rand(0, 61)];
    }
    return $str;
}

$client = new CowitterClient(['CK', 'CS', 'AT', 'ATS']);

// パラメーターにweighted_character_count=trueを付けて280文字をツイート。
// また、ツイートの文字数が140文字を越すためtweet_mode=extendedを使用。
$params = [
    'status' => '280文字ツイート'. PHP_EOL. rand_str(270),
    'tweet_mode' => 'extended',
    'weighted_character_count' => true,
];
$response = $client->post('statuses/update', $params);

// 280文字全てを取得するため、textではなくfull_textを使用。
echo 'text : '. $response->full_text. PHP_EOL. PHP_EOL;
echo 'length : '. mb_strlen($response->full_text);

実行すれば分かると思いますが、これだけで誰でも280文字投稿が可能です。

ここで注意が必要なのは、140文字オーバーのツイートを投稿する時や取得する時にはパラメーターにtweet_mode=extendedが必要になることです。詳しくは以前書いた以下の記事をどうぞ。

hiroto-k.hatenablog.com

エラーメッセージ

280文字を越してAPIを叩いても、エラーメッセージは140文字を超えている時と同じメッセージが返ってきます。

<?php

try {
    // statusに295文字を使用。
    // 280文字を超えているのでもちろんエラーが返ってきます。
    $response = $client->post('statuses/update', ['status' => '280文字以上のツイートテスト'. rand_str(280), 'tweet_mode' => 'extended', 'weighted_character_count' => true]);

    echo 'text : '. $response->full_text. PHP_EOL. PHP_EOL;
    echo 'length : '. mb_strlen($response->full_text);
} catch (\Exception $e) {
    var_dump($e->getMessage());}
}

実行してみると

Status is over 140 characters.

とエラーが返ります。

MacでLinuxディストリをUSBに焼く。

たまにやり方忘れて一々検索するのが面倒なのでメモがてら。

焼くのはUbuntu GNOMEUbuntu GNOMEじゃなくても他のディストリでも殆どこの方法でOK。

USBは8GBあれば十分です。ディストリにもよりますが4GBでも使えるものは使えます。


isoファイルをダウンロード

Linuxのサイトからisoファイルをダウンロード。Ubuntu GNOMEならhttps://ubuntugnome.org/download/からダウンロード出来ます。

f:id:Hiroto-K:20170118193916p:plain

USBメモリをフォーマット

Mac標準のディスクユーティリティを使います。

外部の所に出てるUSBメモリを選択して消去をクリック。名前は何でも良いです。

f:id:Hiroto-K:20170118193801p:plain f:id:Hiroto-K:20170118193814p:plain

ダウンロードしたisoファイルを.dmgファイル変換

ダウンロードしたisoファイルをdmgに変換する。ターミナルで以下のコマンドを実行。isoファイルのパスやdmgファイルの出力場所は置き換えてください。

hdiutil convert -format UDRW -o /path/to/ubuntu-gnome.dmg /path/to/ubuntu-gnome.iso

USBの場所を確認してアンマウント

ターミナルで以下のコマンドを実行。

diskutil list

場所が確認できたらアンマウント。以下のコマンドを実行。パスは置き換えてください。

diskutil unmountDisk /path/to/usb

USBに書き込む

以下のコマンドを実行。dmgファイルとUSBの場所は置き換えてくださ。

sudo dd if=/path/to/ubuntu.dmg of=/path/to/usb bs=1m

書き込みが終わると警告が出ますが取り出すをクリック。

最後に以下のコマンドを実行。これもusbの場所を置き換えてください。

diskutil eject /path/to/usb

書き込みはこれで終わりです。正常に出来ていればブート出来ます。

php-cs-fixerで"."から始まるファイルの中身が修正されない時の対処

PHPファイルのコーディングスタイルを自動で直すphp-cs-fixerで.から始まるファイルが修正出来ない問題の対処方法。


php-cs-fixerで使ってるFinderクラスは元々.から始まるファイルを無視します(例えば.php_csファイルなど)。Finderインスタンス.から始まるファイルを追加しても無視されます。

対処法

.から始まるファイルを無視するかはignoreDotFilesで定義されています。ignoreDotFilesはデフォルトでtrueになってるので、falseに設定すれば修正されます。

.php_csファイルのFinderの設定でignoreDotFiles(false)を叩くだけです。

<?php

$finder = Finder::create()->ignoreDotFiles(false);

これでphp-cs-fixer fixを実行すれば.から始まるファイルも修正されます。

Safariで見ているページのタイトルとURLをfeatherでツイートする。

タイトルにもある通り、Safariで閲覧しているページをfeatherに転送してつぶやく。

featherにはURLスキームがあるので、それを使ってブックマークレットを作る。(ブックマークレットの作り方は調べてください…)

これをコピーしてブックマークのURLに貼ればOK。

javascript:location.href='com.covelline.feather:///post?text='+encodeURIComponent(document.title+' '+document.URL);

PHP CS Fixer 2でファイルの先頭に自動的にコメントを挿入する。

知らない内に、PHP CS Fixerの2系が出ていました。.php_csの中身が結構変わっていて前に書いたファイル先頭にコメントを挿入するのもかなり変わっていたので2系用の記事を作成。

1系のはこっち。

hiroto-k.hatenablog.com


コメントを準備する

頭の方でコメントを入れておく。

<?php

// 先頭に入れるコメント。

$header = <<<'EOS'
This file is part of MyApp.

(c) Hiroto Kitazawa <hiro.yo.yo1610@gmail.com>

For the full copyright and license information, please view the LICENSE
file that was distributed with this source code.
EOS;

ConfigクラスのsetRulesにheader_commentを追加。

1.xではHeaderCommentFixer::setHeaderを使ってコメントを設定していましたが、2.xではConfigクラスのsetRulesメソッドで設定します。

これは1.xの時。

HeaderCommentFixer::setHeader($header);

$fixers = [
    // 省略
    "header_comment",
];

return Config::create()->fixers($fixers);

2.xではこうする。

$rules = [
    // 省略
    "header_comment" => ["header" => $header],
];

return Config::create()->setRules($rules);

fixコマンドを実行

通常通り実行する。

./vendor/bin/php-cs-fixer fix

© 2015-2017 Hiroto-K