2017-09-23

【Python】DMM Web APIでエッチなデータを取得し、Twitterで自動でえっちな投稿してみた

Pythonでエッチなプログラムを書いてみた



こんにちは、アダルトハッカーのDAIです。前回、DMM Web APIを利用して、新人もののAVを取得しました。今度は取得したXML形式のデータを使って、ツイッターに投稿してみました。(ちなみにツイッターの規定を読んだところ、アダルトコンテンツの禁止条項はないようでした)




先日、ふと友達とAVの話をしたときに、一定数サンプル動画のほうが長い動画より好きな人がいることを知りました。そこで今回はDMMのTwitterで自動でポストするプログラムを書いてみました。(アダルト耐性がない人はみないでください)。






追記)そして結局bot化させました。

鳳かなめのサンプル動画まとめbot


#TODO


  • 自分のサイトの準備(ツイッターでも可)(事前準備)
  • TwitterでAPI KEYの取得(事前準備)
  • DMMアフィリエイトに登録(事前準備)
  • DMM APIのためにAPP IDとAFFILIATE IDの取得(事前準備)
  • 検索キーワードの文字コードを取得(事前準備)
  • コーディング


自分のサイトの準備


DMM Web APIを利用する際、アフィリエイトプログラムに登録する必要があります。その際、自分のウェブページが必要になりますので取得しておいてください。ページはツイッターアカウントのページでもかまわないみたいようです。

TwitterでAPI KEYの取得


この記事を参照して、Twitter API KEYを取得してきてください。


【Python twitter】tweepyを利用してlike、follow、removeを実装したbotを作る

なぜやるか ・ブロガーをやっているので、自分のファンになってくれる可能性があるユーザーをフォローしたい。 ・そのユーザーのコメントにいいねして、後で見返したい。


DMMアフィリエイトに登録


この記事を参考に、DMMアフィリエイトに登録してください!


DMMのAPIのためにAPP IDとAFFILIATE IDの取得


これもこちらの記事を参照して、コードを取得してください。


検索キーワードの文字コードを取得


検索キーワードを取得します。これは自分の性癖に合うようにしてください。僕はスケベな友人にリクエストで、「新人」をキーワードに設定しました。グーグル検索で「新人」と打って、表示されたURLをコピーして、日本語の文字コードを取得します。
新人の場合だと、%E6%96%B0%E4%BA%BA&oq=%E6%96%B0%E4%BA%BAとなります。

コーディング


さて、前回、DMM Web-APIから新人でキーワード検索をかけ、XMLデータを取得しました。今回はこのXMLデータをAVのタイトル、画像URL、動画URLをツイートします。



完成形


import urllib.request
from requests_oauthlib import OAuth1Session # ライブラリ(1)
from bs4 import BeautifulSoup 
from TwitterAPI import TwitterAPI
import requests
import tweepy
import os


# 各種キーをセット
CONSUMER_KEY = '[CONSUMER_KEY]'
CONSUMER_SECRET = '[CONSUMER_SECRET]'
ACCESS_TOKEN = '[ACCESS_TOKEN]'
ACCESS_SECRET = '[ACCESS_SECRET]'

#apiを取得
auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_TOKEN, ACCESS_SECRET)
api = tweepy.API(auth)

# ツイート投稿用のURL
url = "https://api.twitter.com/1.1/statuses/update_with_media.json"

# DMMのAPP ID, AFFILIATE ID, 検索キーワードをセット

APPID = "[APPID]"
AFFILIATEID = "[AFFILIATEID]"
KEYWORD = "your keyword here"

#DMMのAPIを取得し、XMLをBeautifulsoupで取得
html = urllib.request.urlopen("https://api.dmm.com/affiliate/v3/ItemList?api_id=" + APPID + "&affiliate_id=" + AFFILIATEID + "%20&site=DMM.R18&service=digital&floor=videoa&hits=2&sort=date&keyword=" + KEYWORD + "&output=xml")
soup = BeautifulSoup(html,"html5lib")

#取得したXMLを整理して表示する

print("取得したデータを表示します")
print(soup.prettify())

#タイトル・女優・画像URL・動画URLを追加

items = soup.items #1つ1つのitemオブジェクトを取得
print("取得したitems数:{}".format(len(items.item)))
for item in items:
    print("--------------")
    title = item.title.string #動画タイトル
    title = (title[:40] + "..動画はこちら→") if len(title) > 75 else title #タイトルが40字過ぎたら省略
    print("title:{}".format(title))
    photoURL = item.imageurl.large.string  #画像URL
    print("photoURL:{}".format(photoURL))
   
    #動画によってはサンプル動画がない。ない場合エラーになるので、tryで囲む
   
    try:
        videoURL = item.samplemovieurl.size_476_306.string
        print("videoURL:{}".format(videoURL))
       
        #ツイート内容
        content = title + "|" + videoURL
        print("ツイート内容:{}".format(content))
       
        #DMMから取得した画像を一度ローカルに保存
       
        request = requests.get(photoURL, stream=True)
        filename = "temp.jpg"
        if request.status_code == 200:
            print("status_code == 200")
            with open(filename, 'wb') as image:
                for chunk in request:
                    image.write(chunk)
            api.update_with_media(filename, status = content)
            print("ツイートに成功しました")
            os.remove(filename)
        else:
            print("画像をダウンロードできませんでした")
    except Exception as e:
        print(e)
print("プログラムを終了しました")

落とし穴

・For文でAPI回しすぎて、本アカウントでアダルト投稿を100して社会的に抹消される件


居場所がなくなるので、気を付けてください。


・AVのタイトルが長すぎて140字普通に超える件


AVのタイトルが長すぎて、ツイート最大文字数を超えることもしばしば。そこで、以下のようなコードを実装して、回避しました。AVのタイトル、タイトルというよりもはやコンテンツに近いくらい長くて笑いました笑


title = (title[:40] + "..動画はこちら→") if len(title) > 75 else title #タイトルが40字過ぎたら省略

・画像をURL指定してポストしようとしてもうまくいかなかった件


urllibから、画像のURLを指定し、ポストしようと試みましたがうまくいきませんでした。ここでかなり時間をとりました。結局、一度ローカルに落とさないとうまくいかないようでしたので、ローカルに一時ファイルを保存し、ポストしたところ成功しました



最後に 


このプログラム定期実行して、ツイッターに埋め込めばオリジナルのアダルトボットがつくれそうですね。特にサンプル動画派の人にとっては、ツイッターを眺めているだけでおかずにスムーズに出会えるので、とてもよいですね。またアフィリエイト収益も入るそうなので、自動プログラムにして稼いでみるのも面白いかもしれません。



追記)その自動化については、Cloud9上での環境構築方法をまとめたので、ぜひご覧ください!そして自動化したbotのフォローもよろしくお願いします。

鳳かなめのサンプル動画まとめbot


【Python】Seleniumの定期処理をHerokuから実行するための環境構築方法 - Cloud9編-

一回Cloud9上でSeleniumの環境構築をする方法をまとめておきたいと思います。だれでも5分以内に同じ動作で、Cloud9上でSeleniumが利用できる環境をセットアップできることを目指します。

Python データ分析入門マニュアルに戻る

注目の投稿

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