Hatena::ブログ(Diary)

I* HACK! ウェブ関連のタレコミ

2017-04-25

Scrapy のLinkExtractorとブラウザのリンク仕様

00:29

Scrapyでは

/ top.html

|----- subdir_a/index_a.html

|----- subdir_b/index_b.html

というディレクトリ構造があり、

top.html に、<a href="../../../../subdir_a/index_a.html">

とあった場合、正しいURLではないので、400エラーとなり、クロールができません。

一方で、最近のブラウザは頭がよくて、

ドキュメントルートトップ以上に遡れないリンクは、勝手にドキュメントルート直下にあるものと扱うようで、

上記のリンクは正しく動作するんです!


昔はそんなことなかったと思うんですがねぇ。。

2017-04-21

Wordpressの検索結果画面にスクリーンキャプチャを表示してみた

17:49

商用のサイト内検索サービスだと、よく検索結果画面にページのキャプチャが載っているかと思います。

それを簡単にWordpressで実現できました(落とし穴あり)

結論から言うと、Wordpressの非公式APIであるスクリーンショットを取得するサービスを利用するというものです。

コードはこんな感じ。

<img width="230" height="130" src="https://s.wordpress.com/mshots/v1/<?php echo esc_url( get_permalink(get_the_ID()) ); ?>?w=230" class="attachment-post-thumbnail size-post-thumbnail wp-post-image">

これで、検索結果画面で、キャプチャを表示してくれます。

f:id:go_nash:20170421175054p:image

おおー、ちょっとリッチな検索結果画面になった。

と思ったのもつかの間、wordpressのこのapiは、日本語フォントは対応していないんですね。

まあ字を細かく見るものでもないし、十分っちゃ十分か・・・

Googleサイトサーチ(カスタム検索)終了!チーン!

17:35

3月いっぱいで、Googleカスタム検索の有料版であるGoogleサイトサーチが新規申し込みを締め切りました。

https://enterprise.google.co.jp/intl/ja/search/products/gss.html


ちゃんとサイトを設計していればあまり迷うことなく、すなわち検索機能を使わないことも多いですが、

やはり最後の受け皿としてサイト内検索は欲しいところです。


そういった中で、Googleのサイトサーチは、年間$100〜と、広告のないサイト内検索を導入可能というとこで

重宝していたウェブ制作者の方々も多かったのではないでしょうか。


もしかするとGoogle代替サービスを出す可能性もありますが、

2018年4月以降は実質

  1. 広告の出るカスタム検索でがまんする
  2. 月額3-5万ほどするサイト内検索サービスを利用する
  3. CMSの検索機能を利用する

といった三択になってくるでしょう。

お手軽なサイト内検索がなくなったことで、逆にサービス開発のチャンスかもしれないですね。

2017-04-11

qTranslateX を使用してWordpressで作成されたサイトをクロールするとクロールできないページが出る件

14:34

https://qtranslatexteam.wordpress.com/browser-redirection-based-on-language/

によれば、URLに言語情報を含まない場合は、下記の値を元に判断しているようだ。

  • referrer url (if cookie is not set)
  • cookie (‘qtrans_front_language’)
  • browser setting (if main home page ‘/’)
  • default language (as set on Settings/Languages configuration page)

すこしビビったのが、referer urlを使っての言語判断が優先されていたということ。


つまり、下記のページがあったとして

http://example.com/en/about

そのあと、リファラを保持しながら下記URLにアクセスした場合

http://example.com/about/history

302リダイレクトで下記英語サイトにリダイレクトされてしまうということだ。

http://example.com/en/about/history

そして永遠にhttp://example.com/about/historyページはクロールされないことになる。。。

クローラーなどを作る際はお気をつけください。

2017-02-02

ansibleのlineinfile での落とし穴

16:30

bindの社内DNSのゾーン設定をansibleで自動化しようとしていたところ、


下記の記述だと、resolver 1のタスク しかincludeステートメントが追加されていなかった。


  - name: resolver 1
    lineinfile: dest={{namedconf}} insertafter="^###localhost_resolver" line='include "/etc/named.{{domain}}.zone";' state=present

  - name: resolver 2
    lineinfile: dest={{namedconf}} insertafter="^###internal_resolver" line='include "/etc/named.{{domain}}.zone";' state=present


どうも、lineinfileだと、lineの中身が同一だと、insertafterのマッチ文字列が異なっていても、そこにすでに、行がpresentなものとされ

二つ目は追加されないようです。


2つ目のline=includeの後ろにもう一個半角スペースを入れることで、二つとも追記できるようになりました。

line='include "/etc/named.{{domain}}.zone";'line='include "/etc/named.{{domain}}.zone"; ' ← これで1回目の文字列と異なるものとしてansibleに認識される

2017-02-01

社内ファイルサーバ検討(その3)〜純正ツールaws clientに落ち着いた〜

11:22

goofys でマウントした領域にrsyncをかけてバックップするという仕組みは原因不明で

実現できませんでしたが、

amazonの純正ツールで sync コマンドを発見。

aws コマンドでs3のバケットと同期できるようです。


exclude オプションなどもあり、rsync的な使い方ができます。

http://docs.aws.amazon.com/cli/latest/reference/s3/sync.html


さっそくawsコマンドラインツールインストールします。

pythonで書かれているので、pip からインストールしました。


コマンドはこんな感じで実行します。

$ /usr/bin/aws s3 sync ${SRC} ${TARGET} ${OPTION_EXCLUDE}

ここで1点問題が発生。

AWSAPIでのアクセスはAWS側のサーバ時間とクライアント側の時刻がずれていないことが必須です。


VirtualBoxのゲストOSで動作させているため、時間が遅れていくという事象が発生し、

Additional Packageをインストールすれば大丈夫みたいなのがあったのですが、

私の環境だとうまくいきませんでした。


ちなみにntpdデーモンで同期しようとしてもうまく動かなかったため、

ntpdデーモンを停止した上で、むりくりntpdateコマンドで強制的にcronで時刻同期するようにしました。


/usr/sbin/ntpdate ntp.nict.jp && /usr/bin/time /usr/bin/aws s3 sync ${SRC} ${TARGET} ${OPTION_EXCLUDE}

syncには時間がかかることが予想されるので、timeコマンドで実行時間もわかるようにしました。

700GBのディスクスペースを同期精査するのに1時間半ほどかかりました。

(アップするファイルがある場合はもっと時間がかかります)


思ったよりも早かったので、夜中に実行しておけば問題はなさそうです。

実行時間もとってメールするようにしてあるので、遅くなった時は気づけるしね。


ちなみに、goofysでせっかくs3バケットをマウントできているので、

こちらのファイルマネージャを使って、どんなファイルがバックアップされるか参照できるようにしました。

検索ができるので便利だし、ファイルの操作やフォルダの作成機能も無効にできるので、

バックアップ領域の参照目的としてはパーフェクトです。

https://github.com/leefish/filethingie


本家サイトがなくなっているぽいですが、とても便利ですよ!

しばらくこんな構成で運用してみたいと思います。