2018-03-02

検索したDMMアダルトのサンプル動画をLINEからすぐ見れる「変態コンシェルジュ」を作ってみました

問題提起


こんにちは、DAIです。(@never_be_a_pm)


アダルト動画の品質は、ここ数年間でかなり品質がよくなってきています。それにつれて、サンプル動画の質も非常によくなってきています。





近年議論されている、問題サンプル動画論争というものがあります。抜くならサンプル動画か、動画一本かという議論です。私が独自に行った調査によりますと、47%の人が、一般的な長編動画よりも、サンプル動画を利用して抜くと回答しています。



ある研究によると、忙しくなればなるほど、サンプル動画で抜く率が高まることが報告されています。労働環境が過酷な日本人には、サンプル動画の需要が非常に伸びてきているといえるでしょう。まさに忙しい現代人のためのサンプル動画なのです。

サンプル動画を選ぶメリット


私は、サンプル動画派です。そして、サンプル動画を選ぶのには以下の理由があります。


1. サンプル動画は要約である。

世の研究者は、すべての論文を隅から隅まで読むのではありません。論文には要約があります。そして、要約を見れば、研究のほとんどのことが瞬時に理解できます。

アダルト動画も同じです。サンプル動画は、動画全体のサマリーと考えても過言ではありません。つまり、もっとも見るべきシーンが短時間でハイライトされているので、最高のユーザー体験を得られるわけです。


2. 短時間で高品質のAVを複数見れる

さらに、短時間で一つ一つの要約を見ることで、様々なAVに一度の自慰行為の中で巡り合えます。自慰工数の削減、ユーザー体験の向上等、圧倒的なパフォーマンスを発揮します。サンプル動画は「忙しい人」向けなのです。


サンプル動画を選ぶなら、DMM.COMだが...


サンプル動画といえば、アダルト動画の大御所「DMM.COM」でしょう。サンプル動画派の私としては、DMM.COMに大変お世話になっております。


しかしながら、私はDMM.COMのサンプル動画を見ることで、以下の欠点を感じました。


1. サンプル動画があるかと思ったら、ないというパターン


パッケージをみて、パンツ脱いでクリックしても、サンプル動画がないことは遺憾の意を表明せざるを得ません。これは論文でもそうですが、要約のない論文など糞です。同じように、サンプル動画のないアダルト動画など、無価値です。


貴重な自慰行為の時間を、ちんぽをだしながらネットサーフィンぐせざるを得ないこのような不毛な工数が存在するのは、まことに許しがたい由々しき事かと思います。


2. 抜きたいと思ってから動画にまでありつける時間が長い

私がDMM.COMにアクセスするフロートしては


・dmm.comにアクセスする
・動画を検索する
・お気に入りの動画を選ぶ
・サンプル動画があるか確認する
・もし行かなければ、次の動画を検索する
・お気に入りの動画を選ぶ
・.......


しかし、これでは動画の検索にかかる工数が無駄です。より連続的にサンプル動画を見れるようにする必要があります。パンツを脱いでスタンバりながら、マウスで動画を探している自分の情けない姿に自分でも幻滅するでしょう。


3. セキュリティの脆弱性


我々男性は、過度に進化したwebブラウザによって、アドレス検索バーに検索履歴からサジェストされてしまうようになっていますある研究では、男性の保持しているPCのアドレスバーに、「x」と入力すると、95%以上の男性はxvideosがサジェストされると報告されています。このように、アダルトサイトの検索サジェスト機能は、第三者の目から性癖を特定されやすくなってしまうので、セキュリティに脆弱性があります。


実際のケースがあります。私は、小学三年生のころ、ひたすら「おっぱい 女子高生」と検索していたのですが、母親とPCをいじっているときに目の前でサジェストされ、妹のせいにしたという過去があります。


また、スケベハッカー(23)の私は、現在Chromeユーザーですが、「三」と入力しただけなのに、セクシー女優三上悠亜の検索サジェストが出てきてしまいます。この社会的な脆弱性は、世の中の男性すべてを悩ませているといっても過言ではありません。


Figure1 「三」と検索しただけなのに、AVのタイトルがサジェストされてしまう


また、大きなPCの画面で、AVを見る場合も、物理的な脆弱性が存在します。ある研究では、自慰行為中に母親が帰宅した際の自慰隠蔽成功率は、5秒以内で80%、10秒以内で20%、20秒以内で0.01%と、指数関数的に低くなっていくと報告されています。非常にセキュアな部分(=心理的に)に脆弱性があります。

4.  iOSだとDMMでアダルト動画を見るアプリが存在しない

Androidでは、R18動画を見るアプリがありますが、iOSだとアプリがありません。つまり、アクセシビリティが限られています。サンプル動画を見るために、アプリを利用することができないので、とても不便な状況です。一応DMM動画をみるアプリは存在するのですが、購入済みの動画しかみれません。サンプル勢は全滅します。

課題の整理


サンプル動画派の人が、DMM.comを利用して、サンプル動画性活を送るには、以下の課題があります。

1. サンプル動画があるかと思ったら、ないというパターン
2. 抜きたいと思ってから動画にまでありつける時間が長い
3. セキュリティの脆弱性
4. iOSアプリが存在しない

これらの課題を解決する必要があります。

解決方法:LINEでDMMのエロ動画のサンプルが見れる「3年B組(31)」の作成




これらの課題を解決するために、今回発明したのが「3年B組(31)」というLINE Botです。(裏名変態コンシェルジュ)


このBotに、AVのキーワードを送信すると、そのキーワードに関連したAVのサンプル動画だけを返してくれます。「動画で抜く」をクリックすると、すぐにサンプル動画にとべます。同じキーワードで送信すると、関連する別のAVを取得してくれます。

以下のQRコードから、スケベなお友達になれます。




シンプルな機能ですが、さきほど上げた課題のすべてが解決できます。


1. 全部サンプル動画がある動画が返ってきます!

もう、サンプル動画がないことに絶望する必要はありません。独自のロジックで、サンプル動画があるAVしかかえってきません。大幅に自慰工数を削減できます。

2. 好きなスケベキーワードを入力するだけで、ワンクリックで動画までアクセスできます!

キーワードを入力すると、すぐに動画がかえってきます。ちんぽを出しながらネットサーフィングする工数を削減できます。我々は、より(性的に)クリエイティビティの高い生産活動に専念することができます。


3. 強固なセキュリティ:グループラインに偽装

スマートデバイスからも利用できるので、万が一抜いていたとしても、スマホを隠せば終わりです。PCの物理的脆弱性がありません。また、Lineからなので、検索履歴が残りません。「三」と入力しても、AVのタイトルがサジェストされることはありません。

また、このBotは通知でばれる心配もありません。Bot名も「3年B組(31)」なので、Bot名がグループラインに擬態しています。なので、AVを見ていても勝手にグループラインが流れているだけだという風に、他人からは見えるようになります。また、最後に「それな」とコメントするので、あたかもグループラインの誰かが「それな」とコメントしたかのように見えるので、他人から見てもまさか「変態コンシェルジュ」とは認識できません。



4. マルチプラットフォーム対応の、ハイスケベビリティ(Skebebility)を実現


スマホ端末であれば、LINEがインストールされていれば、すぐさま自慰行為を実現できます。もうOSに依存することもありません。AndroidでもiOSでも、LINEがつながる環境であれば、すぐにスケベ行為を行えます。


その他Lineとのマッシュアップのメリット

好きなAVをKeepできる

さらに、Lineのネイティブの機能で、様々な使い方ができます。まず、Keep機能を使えば、気に入って何度も抜きたいAVを保存することができます。(ただしセキュリティについては、十分にご注意ください)

スケベグループラインで、AVの共有が可能

また、友達とのグループラインに3年B組(31)を招待し、おすすめのAVの共有を行うことも可能です。(※ただし利便性とセキュリティはトレードオフになります)
友達のグループラインに3年B組(31)を招待すれば、スケベ情報交換会を始めることができます。

アプリケーションのアーキテクチャ

今回は、
  • Line Messaging API(Botの制御)
  • Google Apps Scirpt(Line Messaging API・DMM APIの制御)
  • DMM API(AVのタイトル取得ができる)

で書いています。プログラミング的な処理は、Google Apps Scriptを利用しています。
Line Messaging APIからメッセージをGoogle Apps Scriptで受け取り、そのメッセージをもとにDMM APIにリクエストを送信、AVのタイトル、URL、サンプル動画のリンクをリスト形式でGoogle Apps Scriptでかえし、Lineから見れるようにしています。


実装したソースコード

こちらが実装したソースコード全文です。
処理の流れとしては、Lineからメッセージが送信され、あらかじめWebhock URLに指定しておいたGoogle Apps ScriptがPOSTリクエストを受け取り、doPost関数が起動、そこからDMM APIにリクエストを送りメッセージからAVを取得、その結果を再度URLFetchメソッドでLINEにPOSTリクエストを送り返すといった処理になります。LINEとDMMのAPIのドキュメントを読み込んで、性欲で実装しました。


リファクタリングとか全然してないので汚いコードですが、とりあえず自慰行為ができるまでのソースコードになっています。

// プロパティ取得
var PROPERTIES = PropertiesService.getScriptProperties();//ファイル > プロジェクトのプロパティから設定した環境変数的なもの

//LINE・DMMの設定をプロジェクトのプロパティから取得
var LINE_ACCESS_TOKEN = PROPERTIES.getProperty('LINE_ACCESS_TOKEN')
var DMM_AFFILIATE_ID = PROPERTIES.getProperty('DMM_AFFILIATE_ID')
var DMM_API_ID = PROPERTIES.getProperty('DMM_API_ID') 
var SEARCH_INDEX = Math.floor(Math.random()*(10-1)+10); //検索位置
var reply_token; 
var query; //検索クエリ

//LINEのエンドポイント

var LINE_END_POINT = "https://api.line.me/v2/bot/message/reply"

//DMM・商品情報検索APIのエンドポイントに指定する値
var searchHits = 10 //検索結果のヒット数

//LINEに返すAVの数
var hits = 10
var maxLengthOfTitle = 40 //LINEに返すAVタイトルの最大値

function doGet() {
  return HtmlService.createTemplateFromFile("test").evaluate();
}


//LINEからPOSTリクエストを受けたときに起動する
function doPost(e){
  if (typeof e === "undefined"){ //デバッグのとき
    reply_token = "debug"
    query = "上原亜衣"
  } else { //POSTリクエストのとき
    var json = JSON.parse(e.postData.contents);
    reply_token= json.events[0].replyToken;
    //送られたLINEメッセージを取得
    query = json.events[0].message.text;    
  }
    Logger.log("検索キーワード:" + query)
    //DMMからキーワードで検索した結果のAVをリスト形式で取得  
    var DMMAVList = getDMMAVListByQuery(query)
    //var DMMAVList = getDMMAVListByQueryTest() //テストコード(デバッグ用)
    Logger.log("AVを取得しました")
    //AVをひとつひとつLINEに送信する
    for (var i in DMMAVList){
      Logger.log(i + "本目のAVをLINEに送信します")
      postAVToLineByAV(DMMAVList[i])
      Logger.log(DMMAVList[i] + "を送信しました")
    }
}

function getDMMAVListByQuery(query){ //検索キーワードから、DMMのAVのリストを取得
  var encoded_query = encodeURI(query); //パーセントエンコーディングを行う
  var DMM_end_point = "https://api.dmm.com/affiliate/v3/ItemList?"
     + "api_id=" + DMM_API_ID
     + "&affiliate_id=" + DMM_AFFILIATE_ID
     + "&site=DMM.R18&service=digital&floor=videoa"
     + "&hits=" + searchHits.toString()
     + "&sort=date"
     + "&offset=" + SEARCH_INDEX
     + "&keyword=" + encoded_query
     + "&output=json"
  var response = UrlFetchApp.fetch(DMM_end_point)
  var txt = response.getContentText();    
  var json = JSON.parse(txt);
  var items = json.result.items
  var list = []
  for (var i in items){
    if (i == hits){ //LINEに返すAVの指定値に達したら処理を終了する
       break;
    }
    try {  
      var photoURL = items[i].imageURL.large
      var sampleVideoUrl = items[i].sampleMovieURL.size_476_306 //サンプル動画のURLを取得
      sampleVideoUrl = sampleVideoUrl.replace(/^http?\:\/\//i, "https://");
      var title = items[i].title
      title = title.substring(0,maxLengthOfTitle)
      Logger.log(photoURL)
      Logger.log(sampleVideoUrl)
      Logger.log(title)
      var DMMAV = [sampleVideoUrl, photoURL, title]
      list.push(DMMAV)
      Logger.log(i + "本目のAVを取得しました")
    } catch (e){
        Logger.log("サンプル動画が見つかりませんでした。次のAVを取得します。")
    }
  }
  Logger.log(list.length + "本のAVを取得しました")
  return list;
}

function postAVToLineByAV(AV){

  var messages = [{
    "type": "template",
    "altText": "それな",
    "template": {
      "type": "buttons",
      "thumbnailImageUrl": AV[1],
      "title": AV[2],
      "text": "Please select",
      "actions": [
        {
          "type": "uri",
          "label": "動画で抜く",
          "uri": AV[0]
        }
      ]
    }
  }];

  Logger.log(messages)

  UrlFetchApp.fetch(LINE_END_POINT, {
    'headers': {
      'Content-Type': 'application/json; charset=UTF-8',
      'Authorization': 'Bearer ' + LINE_ACCESS_TOKEN,
    },
    'method': 'post',
    'payload': JSON.stringify({
      'replyToken': reply_token,
      'messages': messages,
    }),
  });   
  return ContentService.createTextOutput(JSON.stringify({'content': 'post ok'})).setMimeType(ContentService.MimeType.JSON);
}


参考までに、こちらがLINEのSDKドキュメントです。

LINE APIのSDKドキュメント

で、これがDMMのAPIドキュメントですね。

DMM APIのドキュメント


ソースコードの解説については、今後書き足していきたいと思います。

注目の投稿

 PythonのTweepyを利用して、Twitter APIを利用している。 その中で、ハマったポイントをメモしておく。 まず、Searchに関して。 Twitter検索は、クライアントアプリ側では、全期間の検索が可能になっている。 一方で、APIを利用する際は、過去1週間しか...