archive.isにアーカイブされたページで警告を表示する。

archive.isをブロックしたりして対策をしてもアーカイブされちゃう事があります。
その対策の間をぬってアーカイブされちゃったページに警告を表示するJavaScriptを作ってみました。

if (location.hostname != "yourdomain") {
    document.title = "[不正コピー]";
    document.getElementsByTagName("body")[0].innerHTML = "";
 
    var i, html = "";
    for (i = 0; i <3000; ++i) {
        html += "/// 不正コピーです! /// ";
    };
    document.getElementsByTagName("body")[0].innerHTML = html;
    html = null;
};

コードは簡単、location.hostnameを比較してyourdomain以外なら警告を表示するコードを実行するだけ。
動作内容はタイトルを「[不正コピー]」に変更し、BODYエレメント内容を全部削除し代わりに「/// 不正コピーです! ///」の文字を3000回並べます。
yourdomainはあなたのサイトのドメイン名に変更して下さい、変更しないと本物のサイトでこのメッセージが表示されて悲惨なことになりますw

JavaScriptなので当然JavaScriptを動作しないようにしてある環境では動きませんが、現在はJavaScriptが動かない環境の方が少ないのである程度の効果はあると思います。

序で・・と言ったらあれですが・・
この文字を表示する動作を重くしたい場合は以下のようにコードを変更するだけ。

if (location.hostname != "yourdomain") {
    document.title = "[不正コピー]";
    document.getElementsByTagName("body")[0].innerHTML = "";
 
    for (var i = 0; i <3000; ++i) {
        document.getElementsByTagName("body")[0].innerHTML += "/// 不正コピーです! /// ";
    };
};

これは文字が追加される毎にDOMのレンダリングが発生するのでレンダリング負荷が増えます。
低スペックのPCやモバイル端末ではクラッシュさせる事もできるかも。
本当に重くさせるのであれば無限ループ化すればOK。

ちょっと応用すればarchive.isのロボットを狙い撃ちでクラッシュさせアーカイブを中断させる事も可能です。

Twitterにアップされている動画のTSファイル一覧を表示&保存する

Twitterにアップされている動画で保存したい物があったので、HTTPリクエストログからURLをゲットしようとおもったら・・・
なんとm3u8の再生リスト形式になっていて動画自体も.tsに分割されていました。

#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=320000,RESOLUTION=240x180,CODECS="mp4a.40.2,avc1.42001f"
/ext_tw_video/.../pu/pl/240x180/???.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=832000,RESOLUTION=480x360,CODECS="mp4a.40.2,avc1.42001f"
/ext_tw_video/.../pu/pl/480x360/???.m3u8
#EXTM3U
#EXT-X-VERSION:6
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-TARGETDURATION:3
#EXTINF:3.000,
/ext_tw_video/.../pu/vid/0/3000/480x360/???.ts
#EXTINF:3.000,
/ext_tw_video/.../pu/vid/3000/6000/480x360/???.ts
#EXTINF:3.000,
/ext_tw_video/.../pu/vid/6000/9000/480x360/???.ts
#EXTINF:3.000,
/ext_tw_video/.../pu/vid/9000/12000/480x360/???.ts
#EXTINF:3.000,
/ext_tw_video/.../pu/vid/12000/15000/480x360/???.ts
....

再生リストから欲しいサイズの動画を選んで分割ファイルをダウンロードすれば良いんだろうけど面倒くさいw
それに、分割は3秒毎なので2分を超える動画は70ファイル超え!

そんなの1つずつURLをコピペなんてやってられない・・って事で、動画サイズ毎のURLとファイルを一覧表示するGreasemonkeyスクリプトを作ってみました。
動作してる動画はこちら。

1ファイル毎に手動保存なのはローカルに自動でファイルを保存するAPIが呼び出せないから。
userChrome.jsとして動かせばできるんだけど、セキュリティ的にあまり宜しくない。

まあ随分と楽になるんじゃないかなーと。
保存時にはINDEXに表示されている番号と同じファイル名にしないと、TSファイルの連結時に時系列がごちゃごちゃになりますw

おまけ?として法人など業界用の動画VMAP形式の動画も落とせるようにしました。
分割されていないので楽ちんですw
続きを読む

WordPressが生成したサムネイル画像からexif情報を削除する

WordPressで画像をアップロードするとサムネイル画像が生成されますよねー。
そのサムネイル生成方法はサーバー設定でImagickが有効化されているとImagickがGDが有効な場合はGDが使用されています。
うちの環境はImagickを実行するとApacheを巻き込んでクラッシュするので仕方なくというかPHPではメジャーで軽いGDほぼ一択。

しかしGDでJPEGを生成するとexifコメントに「CREATOR: gd-jpeg v1.0 (using IJG JPEG v90), quality = ...」って情報が追加されてしまいます。
たかが数バイトのデータですが、Yslow等のWebサイトの計測ページでは警告されマイナスポイントになりますし、要らないデータなのでない方がいいかなー。

なので、アップロードした画像と作成されるサムネイルのexif情報を削除するプラグインを作ってみました。
サムネイルのexif削除はGDを使用しているサーバー向けで、Imagickを使ってる場合はサムネイルにはexif情報は記録されません。

exifを削除するのに使用する物はImageMagickのスタンドアローンバージョン又はIMagick。
スタンドアローンを使う場合は、ImageMagickがインストールされている環境でないとダメ。

まずは完成PHPソース。

<?php
/*
Plugin Name: Remove EXIF
Plugin URI: http://blog.wolfs.jp/20160707-3638/
Description: アップロードした画像とサムネイル画像のexif情報を削除します。
Version: 1.0.0
Author: Kerberos
Author URI: http://blog.wolfs.jp/
*/
 
class removeExif {
    private $imagemagick_cli = true;
    private $imagemagick_path = '/usr/imagemagick/convert';
 
    public function __construct() {
        add_filter('wp_handle_upload', array($this, 'wp_handle_upload'));
        add_filter('wp_generate_attachment_metadata', array($this, 'wp_generate_attachment_metadata'), 10, 2);
    }
 
    public function wp_handle_upload($arg) {
        if ($this->check_mime($arg['type']) === true) {
            $this->remove_exif($arg['file']);
        }
 
        return $arg;
    }
 
    public function wp_generate_attachment_metadata($metadata, $attachment_id) {
        $dirArr = explode('/', $metadata['file']);
        $baseDir = wp_upload_dir(null, false);
        $uploadDir = $baseDir['basedir'].'/'.$dirArr[0].'/'.$dirArr[1].'/';
 
        foreach ($metadata['sizes'] as $entry) {
            if ($this->check_mime($entry['mime-type']) === true) {
                $this->remove_exif($uploadDir.$entry['file']);
            }
        }
 
        return $metadata;
    }
 
    private function check_mime($mime = null) {
        return ($mime === 'image/jpeg' || $mime === 'image/jpg');
    }
 
    private function remove_exif($filePath) {
        $filePath = addslashes($filePath);
 
        if (file_exists($filePath) === true) {
            if ($this->imagemagick_cli === true) {
                if (is_executable($this->imagemagick_path) === true) {
                    try {
                        exec('"'.$this->imagemagick_path.'" "'.$filePath.'" -strip "'.$filePath.'"');
                    } catch (Exception $e) {}
                }
            } else {
                if (class_exists('Imagick') === true) {
                    $im = new Imagick($filePath);
 
                    try {
                        $im->stripImage();
                        $im->writeImage($filePath);
                        $im->clear();
                        $im->destroy();
                    } catch (Exception $e) {}
                }
            }
        }
    }
}
 
new removeExif();
?>

かなり簡単なコード。(`・ω・)b

各ファンクションの簡単な説明は・・・
続きを読む

TaoTronics Selfie Stick TT-ST001を買ってみた

今まで使っていたダイソー製300円の自撮り棒は、伸縮部分は回転する、アーム部分は破損する等あまり良い物ではなかった。
アーム部分は買い換えるのが高く付くほど壊れるので、グルーガンで補強したりして使ってましたw
ダイソー自撮り棒
まあ汎用のカメラ三脚ネジで色々連結できるので、長い三脚として使ったりできるのは楽だったけれど、やっぱりダイソークオリティ。

なので、海外ではSelfie Stickで有名なTaoTronicsの自撮り棒「TaoTronics Selfie Stick TT-ST001」を買ってみました。
値段はこの記事を書いた時点で2,199円、まあそこそこの値段。

TT-ST001の特徴は、
 ・Bluetoothでシャッターを操作 (Android、iPhone対応)
 ・バッテリー30時間
 ・エアロスペースアルミニウム製
 ・最大荷重5Kg
 ・アーム角度270度、伸縮76cm
 ・重さ120g、折りたたみ時 全長18cm 幅5cm
って所です。
 
早速届いた商品を開封。
TaoTronics TT-ST001 - パッケージ TaoTronics TT-ST001 - パッケージ中身
外箱はツルっとした厚紙で内箱とピッチリサイズなので若干取り出しに手こずりましたw
内箱にはサラっとした半透明のビニールに包まれた本体が。
続きを読む

archive.isの新しいサーバー

archive.isはサイトの著作権を無視しサイトを丸ごとコピーするのはご存じだと思います。
このブログも一部の画像はライセンス購入した物があるので、ライセンスに違反する為削除してほしい と要求を送ったけれど無視されました。

更にサイトのcanonical、description、keywords、OGP、Twitter情報を書き換えるため悪質です。
なのでうちは、archive.isサーバー群のIPアドレスからの接続をドロップしているのですが、どうも新しいサーバーを用意したみたいです。
(サーバー一覧等はarchive.is サーバーIPアドレス一覧前回の記事をご覧下さい。)

ちなみに、Googleにインデックスされたarchive.isのコピーサイトはGoogleへ著作権違反の報告をする事で検索インデックスから削除可能です。
私はこのブログの612ページ分を著作権違反で報告し削除してもらいました。

オリジナルサイトとarchive.isのコピーサイトがGoogleのインデックスに登録されてもarchive.isの順位が上がらないのは著作権違反の報告が多く、Webマスター側の権利が認められているからでしょうねー。
アーカイブ保存され困っているWebマスターさんはドンドン著作権違反でarchive.isを報告しましょう!
 
今回はそのarchive.isに新しいサーバーが増えたようで、見事にダミーサイトがアーカイブされちゃいました。
サーバーはスパム業者を排除しない事で有名なLinode LLCのサーバー。
確認したIPアドレスは139.162.218.90です。
RIRへの照会情報は

% This is the RIPE Database query service.
% The objects are in RPSL format.
%
% The RIPE Database is subject to Terms and Conditions.
% See http://www.ripe.net/db/support/db-terms-conditions.pdf
% Note: this output has been filtered.
% To receive output for a database update, use the "-B" flag.
% Information related to '139.162.0.0 - 139.162.255.255'
% Abuse contact for '139.162.0.0 - 139.162.255.255' is 'abuse@linode.com'
inetnum: 139.162.0.0 - 139.162.255.255
netname: EU-LINODE-20141229
descr: 139.162.0.0/16
org: ORG-LL198-RIPE
country: US
admin-c: TA2589-RIPE
tech-c: TA2589-RIPE
tech-c: LA538-RIPE
status: LEGACY
remarks: For information on "status:" attribute read https://www.ripe.net/data-tools/db/faq/faq-status-values-legacy-resources
remarks: Please send abuse reports to abuse@linode.com
mnt-by: linode-leg-mnt
created: 2004-02-02T16:20:09Z
last-modified: 2015-05-05T01:52:02Z
source: RIPE

organisation: ORG-LL198-RIPE
org-name: Linode, LLC
org-type: OTHER
address: 329 E. Jimmie Leeds Road, Suite A, Galloway, NJ 08205
abuse-c: AR31889-RIPE
abuse-mailbox: abuse@linode.com
mnt-ref: linode-leg-mnt
mnt-by: linode-leg-mnt
created: 2015-04-20T03:09:43Z
last-modified: 2015-04-20T03:18:36Z
source: RIPE # Filtered

person: Linode Abuse Support
address: 329 E. Jimmie Leeds Road, Suite A, Galloway, NJ 08205, USA
phone: +16093807100
abuse-mailbox: abuse@linode.com
nic-hdl: LA538-RIPE
mnt-by: Linode-mnt
created: 2009-11-11T15:16:50Z
last-modified: 2015-08-13T19:55:05Z
source: RIPE

person: Thomas Asaro
address: 329 E. Jimmie Leeds Road, Suite A, Galloway, NJ 08205, USA
phone: +16093807504
nic-hdl: TA2589-RIPE
mnt-by: Linode-mnt
created: 2009-11-02T17:17:56Z
last-modified: 2014-11-20T18:51:15Z
source: RIPE

% Information related to '139.162.192.0/19AS15830'
route: 139.162.192.0/19
descr: LINODE-UK
origin: AS15830
mnt-by: LINODE-LEG-MNT
created: 2015-06-17T20:45:47Z
last-modified: 2015-06-17T20:45:47Z
source: RIPE
% This query was served by the RIPE Database Query Service version 1.87.4 (DB-1)

うん紛うことなくLinode LLCのサーバー。
逆引きホスト名もli1381-90.members.linode.comなので間違いなし。

いやー、スパムの苗床Linodeを選ぶとは流石archive.isさん!
アビューズ報告してもレンタル先から処分されないんだから絶好のサーバーですよねー
archive.is サーバーIPアドレス一覧ページは既に反映済みです。

スパムメールとかのサイトを弄って遊ぶみたいに、archive.isでも遊べないかな・・・?と思っていたら、ちょっと面白いことを思いついたので実行してみました。
続きを読む