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

Lazuli

らずり

サーバを持たない全自動アダルトサイト「AdultMidnight」を作りました

aws php

f:id:app2641:20130401215329p:plain

はじめに

表題のサイトを作りました。
ロボットが様々なアダルトサイトを渡り歩いてその日更新されたコンテンツを収集して表示させるサービスです。星マークをクリックすると動画ページへ移動します。
アダルトサイトなので18歳未満は閲覧禁止。

全自動アダルトサイト AdultMidnight


以下、AdultMidnightを作るために使用した技術などを簡単に書いておきます。

サイトのコンセプト

AdultMidnightを作るにあたり、ふたつのコンセプトを設定しました。

出来るだけサーバを持たないこと

今までゴミみたいなサービスをいくつか作ってきた中で一番面倒だったのがサーバの管理です。監視とかセキュリティとか負荷分散。手間がかかってしんどいと感じていました。
なので、今回作るサイトはサーバ管理の手間をなるべくなくすことを第一のコンセプトに設定しました。実際にAdultMidnightはsshでログインするようなサーバを動かすことなく運用することができています(どう動いているかは後述)。

自動的にコンテンツを作り上げること

面倒くさいのはサーバ管理だけではありません。日々のコンテンツ管理も同じように面倒くさいです。
コンテンツ管理については、楽しよう楽しようと工夫をして一日5分程度管理画面でいじればいい!みたいなサイトも以前は作ったことがありますが、人間とは欲深く、それですらも面倒に感じていました。
第二のコンセプトは人間の手を加えることなくコンテンツを作り上げていくことにしました。実は結果から言うとこのコンセプトは7割達成ぐらいであまり納得のいく結果にはなりませんでしたが・・。


使用した技術

上記の二点のコンセプトをクリアするためにAdultMidnightでは AmazonWebService などいくつかのサービスを利用して実装しています。

巡回ロボット

アダルトサイトを横断するロボットはPHPで作りました。ロボットは巡回するサイトを、プラグインで拡張をしてアクセスをしにいくという設計にしてあります。つまり、AとBというサイトを見に行きたいならロボットにAとBというプラグインを読み込ませてあげると巡回対象に組み込まれるという仕組みです。巡回したいサイトのたびにプラグインを作らなければいけないので少々めんどくさいのが欠点です。

プラグインでは、プラグイン固有のサイト(AプラグインならAサイト)がその日更新したエントリの情報を取得します。RSSから更新したエントリのURLを取得して、 SimpleHTMLDomParser というライブラリでエントリ内容を解析しています。
下記のようにjQueryライクに要素を取得することが出来るのでとても使いやすいです。

<?php
$html = file_get_html('http://example.com');
$title = $html->find('div.entry_header h2.entry_title', 0);
echo $title->plaintext;


アイキャッチ画像についてはconvertを使って希望のサイズにリサイズをして取得をしています。
ロボットはサイトを巡回し終わったら静的なHTMLを構築します。構築したHTMLは Amazon Simple Storage Service (S3) へ保存するように実装がしてあります。S3の使い方は後述します。

AmazonElasticComputeCloud と AutoScaling

巡回ロボットを動かすにはサーバが必要です。コンセプトに挙げたようにサーバ出来るだけ持ちたくないです。
そこで、 Amazon Elastic Compute Cloud(EC2)AutoScaling の登場です。

AutoScalingはEC2サーバのオートスケールを容易に行うことが出来るサービスです。このAutoScalingにはas-put-scheduled-update-group-actionという機能が付いていて、cron記法でサーバを立ち上げたり破棄したりということができます(前回のエントリ参照)。

これを利用して、
一定の時間帯になったらサーバを立ち上げ → ロボットを動かし巡回サイトをめぐってコンテンツを収集 → 収集が終わったらコンテンツをS3保存 → 不要になったロボットサーバを破棄
というサイクルを作ることにしました。ロボットサーバはSecurityGroupでInboundをすべて閉じてあるので外部からアクセスすることが出来ないようになっています。

AutoScalingは必要な時間帯以外はサーバを立ち上げないのでコスト的にも嬉しい機能です。

AmazonSimpleStorageService

ロボットで生成したコンテンツページはAmazon Simple Storage Service (S3) に保存されます。S3では静的ページをホスティングさせる機能が付いています。AdultMidnightのサーバにはこれを利用しています。めんどくさい管理はAWSに任せてしまって、サーバ管理から手を切ろうという寸法です。
AWSからこんな発表がありましたよね。10円から〜とか言ってるけど実際どれぐらいコストかかんの?っていうのも知りたかったのでちょうどいい機会になりそうだと思っています。

近頃のS3は Amazon Route53 と組み合わせることでサブドメイン無しのドメインを利用できるようになりました。AdultMidnightもRoute53を使ってサブドメイン無しを実現しています。
また、S3は通常のレンタルサーバの定額課金と違い、従量制課金です。アクセスが多ければ多いほどお金がかかります。格納している容量によってもコストは変わってくる為、あまり大量にコンテンツをS3に置きたくないです。LifeCycleというS3の機能を使えば一定日数後にコンテンツを自動で削除することも出来るのでそれを利用してコンテンツの自動削除も行なっています。アダルトサイトのコンテンツなんて古いものは特にいらないでしょうし、AdultMidnightでは一週間でページがなくなるようになっています。


まとめ

そんなわけで一切手をかけない 全自動アダルトサイト AdultMidnight よかったら使ってみて下さい。検索機能もカテゴリ分けも一切ないシンプルなサイトです。残念ながらスマフォ対応はしてませんが星さえタップ出来れば動画を見ることが出来ます。
サイドバーにAmazonのWishListをぶち込んでおいたので、気が向いたら何か恵んでください!アダルトアフィより建設的なはず!