Pythonでエッチなプログラムを書いてみた
こんにちは、アダルトハッカーのDAIです。前回、DMM Web APIを利用して、新人もののAVを取得しました。今度は取得したXML形式のデータを使って、ツイッターに投稿してみました。(ちなみにツイッターの規定を読んだところ、アダルトコンテンツの禁止条項はないようでした)
先日、ふと友達とAVの話をしたときに、一定数サンプル動画のほうが長い動画より好きな人がいることを知りました。そこで今回はDMMのTwitterで自動でポストするプログラムを書いてみました。(アダルト耐性がない人はみないでください)。
よっしゃ!DMM APIから画像と動画URLとってツイートすることに成功したぞ!— DAI (@never_be_a_pm) September 21, 2017
Qiitaにでもあげるか。 https://t.co/G03vQfvb8M
新人グラビアアイドルたちに突撃交渉!グラドルファンの童貞クンと人生初の王様ゲーム..|https://t.co/x6k8rEW5hh pic.twitter.com/sswtbOUPUs— DAI (@never_be_a_pm) September 21, 2017
追記)そして結局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からR18データを取得してみた https://t.co/9e8MCYIM3v— DAI (@never_be_a_pm) September 23, 2017
DMMのAPIのためにAPP IDとAFFILIATE IDの取得
これもこちらの記事を参照して、コードを取得してください。
ブログ更新しました! DMM APIからR18データを取得してみた https://t.co/9e8MCYIM3v— DAI (@never_be_a_pm) September 23, 2017
検索キーワードの文字コードを取得
検索キーワードを取得します。これは自分の性癖に合うようにしてください。僕はスケベな友人にリクエストで、「新人」をキーワードに設定しました。グーグル検索で「新人」と打って、表示されたURLをコピーして、日本語の文字コードを取得します。
新人の場合だと、%E6%96%B0%E4%BA%BA&oq=%E6%96%B0%E4%BA%BAとなります。
コーディング
さて、前回、DMM Web-APIから新人でキーワード検索をかけ、XMLデータを取得しました。今回はこのXMLデータをAVのタイトル、画像URL、動画URLをツイートします。
— DAI (@never_be_a_pm) September 20, 2017
完成形
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のタイトル、タイトルというよりもはやコンテンツに近いくらい長くて笑いました笑
AVのタイトル長すぎて、140字オーバーするのふつうに面白い。 pic.twitter.com/ZHmPlerCJn— DAI (@never_be_a_pm) September 21, 2017
title = (title[:40] + "..動画はこちら→") if len(title) > 75 else title #タイトルが40字過ぎたら省略
・画像をURL指定してポストしようとしてもうまくいかなかった件
urllibから、画像のURLを指定し、ポストしようと試みましたがうまくいきませんでした。ここでかなり時間をとりました。結局、一度ローカルに落とさないとうまくいかないようでしたので、ローカルに一時ファイルを保存し、ポストしたところ成功しました。
症状としてはこんな感じ。jpegを確認すると、やはり起動しない。— DAI (@never_be_a_pm) September 21, 2017
スクレイピングでとってきてるんだけど、おかしいなぁ pic.twitter.com/jh8atQnqHX
仮説が当たってた。まずローカルにurllibで落としてきて、それをポストするのがよさそう。 / “python - How to update twitter status with image using image url …” https://t.co/ouZr0ObN5S— DAI (@never_be_a_pm) September 20, 2017
最後に
このプログラム定期実行して、ツイッターに埋め込めばオリジナルのアダルトボットがつくれそうですね。特にサンプル動画派の人にとっては、ツイッターを眺めているだけでおかずにスムーズに出会えるので、とてもよいですね。またアフィリエイト収益も入るそうなので、自動プログラムにして稼いでみるのも面白いかもしれません。
追記)その自動化については、Cloud9上での環境構築方法をまとめたので、ぜひご覧ください!そして自動化したbotのフォローもよろしくお願いします。
鳳かなめのサンプル動画まとめbot
追記)その自動化については、Cloud9上での環境構築方法をまとめたので、ぜひご覧ください!そして自動化したbotのフォローもよろしくお願いします。
鳳かなめのサンプル動画まとめbot
【Python】Seleniumの定期処理をHerokuから実行するための環境構築方法 - Cloud9編-
一回Cloud9上でSeleniumの環境構築をする方法をまとめておきたいと思います。だれでも5分以内に同じ動作で、Cloud9上でSeleniumが利用できる環境をセットアップできることを目指します。
>Python データ分析入門マニュアルに戻る