Pythonを書くんだヨ!

なんかこのままスクレイピングもういいやってあきらめるんもどうかなって思ったのでスクレイピングに向いてるっていうプログラミング言語Pythonを触ることにした。これでPornderのバックエンド部分に活用しようとかはまだわからんけど、食わずぎらいもよくないかなっておもうのでまあやってみるだけやってみるってことで。
qiita.com
なんかよくわからんけどスクレイピング用のライブラリが豊富にあるのがPythonスクレイピング作業に向いている点らしい.....????
なんで?

Pythonインストール

Ubuntu環境のPython - python.jp
公式っぽい。わかりやすかった。というかやることもそんなに多くなかったしつまるところもなかったな

ubuntuだったらもともとPythonプログラムを解釈するためのPythonが入ってるんだけど、システム上で動作させているPythonをそのまま使うのはちょっとこわいので開発するんなら自前のPythonを用意しましょうね~」みたいな感じのことが書かれてた。インストール方法も簡単だった。

公式偉い。

ハロワした

print("HelloWolrd")

終わり。拡張子は"~~.py"、ピヨみたいで可愛い。

python ~~.py

実行、問題無さそう、普通に標準出力できた。

VSCode・インテリセンスが効かない?を解消 - Qiita
vsCodePythonファイル用の補完設定を入れた。

FizzBuzz書いた

for num in range(20):
  if num == 0:
    pass
  elif num % 5 == 0 and num % 3 == 0:
    print("FizzBuzz")
  elif num % 3 == 0:
    print('Fizz')
  elif num % 5 == 0:
    print('Buzz')
  else :
    print(num)

こんな感じ。

1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz
16
17
Fizz
19

Pythonの条件分岐:if文 | UX MILK
Pythonのif文による条件分岐の書き方 | note.nkmk.me
参考にしたのはここ。else if文がelifって書かなきゃいけないところをelseってタイポして一瞬詰まってた。
あと、Pythonでは純粋にJavascriptのfor文みたいなかんじじゃなくて、配列をループさせてるっぽい。感覚としてはforeach文に近いのかな。

スクレイピング

とりあえずしてみる
qiita.com

ここのをコピペしてみた。

# coding: UTF-8
import urllib2
from bs4 import BeautifulSoup

# アクセスするURL
url = "https://jp.pornhub.com/"

# URLにアクセスする htmlが帰ってくる → <html><head><title>経済、株価、ビジネス、政治のニュース:日経電子版</title></head><body....
html = urllib2.urlopen(url)

# htmlをBeautifulSoupで扱う
soup = BeautifulSoup(html, "html.parser")

# タイトル要素を取得する → <title>経済、株価、ビジネス、政治のニュース:日経電子版</title>
title_tag = soup.title

# 要素の文字列を取得する → 経済、株価、ビジネス、政治のニュース:日経電子版
title = title_tag.string

# タイトル要素を出力
print title_tag

# タイトルを文字列を出力
print title

最初のコードをコピペしてリクエスト先のURLだけhttps://jp.pornhub.com/に変えてみる

結果
<title>無料エロムービーとセックス動画。Pornhubはエロ動画をダウンロードしたりストリーミングで鑑賞できる最強の動画サイトです。</title>
無料エロムービーとセックス動画。Pornhubはエロ動画をダウンロードしたりストリーミングで鑑賞できる最強の動画サイトです。

すごい。できた。普通に感心した。


色々詰まったりライブラリの使いかたとかかって1時間半くらい難儀してたんだけど、なんとか動くサムネの動画の取得ができた。
コードはこんな感じ

# coding: UTF-8
import urllib2
from bs4 import BeautifulSoup
import re


# アクセスするURL
url = "https://jp.pornhub.com/"

# URLにアクセスする htmlが帰ってくる
html = urllib2.urlopen(url)

# htmlをBeautifulSoupで扱う
soup = BeautifulSoup(html, "html.parser")

# imgタグのクラス名がrotatingなやつを見つけてくる
image = soup.find_all('img', class_='rotating')


# タイトル要素を出力
for url in image:
  print(url.get('data-mediabook'))

出力はこんなかんじ

https://ew.phncdn.com/videos/201906/08/228265971/180P_225K_228265971.webm?validfrom=1577116761&validto=1577123961&rate=150k&hash=0BVE1wLN2OHphItgy6Jyerxc75E%3D
https://ew.phncdn.com/videos/201906/08/228290931/180P_225K_228290931.webm?validfrom=1577116761&validto=1577123961&rate=150k&hash=YQFSB3EFXxch9A4AKr%2FqLSyxW9c%3D
https://ew.phncdn.com/videos/201906/15/229519562/180P_225K_229519562.webm?validfrom=1577116761&validto=1577123961&rate=150k&hash=XLc4QcIKYH4yP6FlqbanzEMVjxY%3D
https://ew.phncdn.com/videos/201906/15/229520032/180P_225K_229520032.webm?validfrom=1577116761&validto=1577123961&rate=150k&hash=8yhNVSYwAelY6Ss4njyVu2JSUdM%3D
https://ew.phncdn.com/videos/201906/17/229861342/180P_225K_229861342.webm?validfrom=1577116761&validto=1577123961&rate=150k&hash=h051FYS%2BwA4hRsKpXDEMN7Kw2jE%3D
https://ew.phncdn.com/videos/201906/18/230205292/180P_225K_230205292.webm?validfrom=1577116761&validto=1577123961&rate=150k&hash=WxR%2FdWE2VF63jMF8aKO2W0QupEk%3D
https://ew.phncdn.com/videos/201906/19/230242582/180P_225K_230242582.webm?validfrom=1577116761&validto=1577123961&rate=150k&hash=lFq%2BqAzMjHBuho9EKpwPHKlbTTQ%3D

いいかんじかも。あとはこれで指定の動画のサムネとか取得できたらいいなって感じかな。それはまた明日でいいや。

f:id:ten0313:20191224024148j:plain
カレー食った。美味しい。
でもやっぱりごはんはインディカ米の方がこっちではいいな。日本の米もあるんだけど、炊きかたがインディカ米のほうがちゃんとしてる。

f:id:ten0313:20191224024148j:plain
あと耳に穴あけた。こんどこそ定着してほしい(といいつつも別にケアとか怠るんやろうけど)

今から進捗生む

なんとか机に座れて作業開始できた。横になったらあかんわマジで

やっぱりと言うかなんというか、pornhubのアレをフロントサイドで直接叩きにいくのは無理そうなのでとりあえずここは置いといて、閲覧中の動画のカテゴリとか見れるようにしとこうかなって思ってる。大事やんこれ。

アダルト系の開発って超楽しいんだけど、やっぱり普通の開発サービスのリリースより反応率が高いのがいいのかな。フォロワーが欲しいよお;;

やることが変わったからブランチ名変えた。カレントブランチのリネームをするなら

 git branch -b 新しいブランチ名

でよさげ
stackoverflow.com

あとなんかpornhubの内部でのカテゴリの名前がなんか統一されてない気がする(例えば"rough-sex"が"RoughSEX"になってたりする)。これまじで迷惑なので俺がMaindgeek MindGeek - Wikipedia 入ってなおしとくわ。

"interracial"の訳にちょっとハマった。「国際間セックス」とでも訳すんのかな。国境ごしのセックスかな。メキシコ人とアメリカ人の壁穴ファックかな
pornhubでは「異人種間」って表記されてて、これはグーグル翻訳の力とかではなくpornhubがきちんと命名したやつなんだけど、ちょっと「人種」って軽々しく使っていいのかな...ってちょっとためらってた。まあ確かに金髪白人と黒人チンポがヤってるわけやからな。「異人種間」でなにもまちがってない。潔くコレにしといた。


今日ぶっちゃけそこまで作業できなかったけど、というか大半をマジでげんなりする作業してた。性癖カテゴリをひたすら日本語訳するやつ。ひたすら人の陰部見ながら淫語を翻訳にかけたりいいかんじの和訳になおしたりなんていえばいいか調べたりまーーーじでくそ。誰か俺の代わりに"big-ass"を「巨尻」に翻訳する作業してくれや

f:id:ten0313:20191223033752j:plainf:id:ten0313:20191223033804j:plain
今日はホテルのプール行ってた。ちょっと寒い。最近は16時くらいになったらさすがにプール入るのは難儀する気温になってきた。それでも日曜日だからか人はまあまあいたけど。次は昼間に行く。昼間はバカ暑いので
あと美味しみのピザ食った。チーズおいしい

いまから寿司を食いにいきます

僕がベトナムでよく行く寿司屋は
Sushi Hung HANARE (寿司香はなれ) - レタントン通り周辺/寿司 [食べログ]
ここです。たべろぐを初めて開いたんですけど、デザインくそすぎひん?

ランチが安くて美味しいです。ベトナムは基本的に海産物が美味い。

開発ですけど

とりあえず動くサムネは捨てて(置いておいて)データの取りにいく先をもう直接Pornhubの提供してるやつに切りかえようとおもいます。
ブランチ切って今日中に移行したいなあ。これで結構読み込みとか早くなるはず

そんで夜なんですけど。

結局今日なんもせんかったな!!!! ひたすらダラダラしてて良かった。ポケモンがたのしい。デスカーン ダイオウゾウ ダーテング ウッウ ドラパルドンでレート潜ってる。てかいつからポケモンは6文字OKになってたん? ちょっと気にくわないけど、海外表記とか考えたら6文字なんてとんでもないし(ミミッキュが"mimikkyu")ええんかな

作業は今さっきやっとブランチ切ったところ。もう寝る

f:id:ten0313:20191222044551j:plain
今日食べたラーメン、豚骨系にありがちな安っぽいやつじゃなくて普通に美味しかった。餃子はそんなだったけど。

あとXuân Thủyのいいかんじの店に夜飲みと飯でいった。
f:id:ten0313:20191222044855j:plainf:id:ten0313:20191222044920j:plain
メキシコバーっぽかった。タコス美味しかったけど、メキシカンカクテルはまあまあって感じ。やっぱああいうかんじのカクテルに使ってる酒のドぎついエタノール臭さ、苦手かも。
寝るかも

寝れなかったので

はてな記法くっそ便利だなっておきもち。なんか昨日からポケモンしてイライラしてブッダ読んでたらこんな時間になってた。害悪受けパーティ潰せたのでまあよし。

昨日言ってたpornhubの正解っぽいURL

jsonきれいで整形してよくみてみたら、普通にpornhubAPIで取ってきた内容と一緒だった。なんだこれ。
これ普通にフロント側から直接ここを叩けばよかった話では?

でもこれでもやっぱりまだ欲しいデータがあって、それはpornhubでサムネにマウスをホバーさせたら動きだすアレ。自動再生されるサムネ。
たとえばこの動画https://jp.pornhub.com/view_video.php?viewkey=ph5bdf78c37da41の動くサムネだとコレhttps://dw.phncdn.com/videos/201811/04/190588501/180P_225K_190588501.webm?ttl=1576816367&rs=1200&hash=28eba001d554b2e24ba4059558fa8fd2デベロッパーツールから取ってきたものなんだけど、これはなぜか件のURL先のJSONデータには入ってない。動くサムネって今やってる複数の画像表示より圧倒的に内容わかりやすいし、自分自身欲しい。
こればっかりはスクレイピングにたよるしかないのかなあ。

これも前書いたんですけど、ギークハウスの他の人に聞いてもPythonしか出てこなさそうなのでやめておきまス~~~~
そこまで複雑な処理をするわけじゃないし、それだったらもうNodeJSで書きたいし今後Pythonを書く機会も無さそうなので

このQiita記事がいろいろ良かった。デベロッパーツールからCSSセレクタを持ってこれるの知らんかったしこれまじで使えるな!?!?!?
Python Webスクレイピング テクニック集「取得できない値は無い」JavaScript対応@追記あり6/12 - Qiita

なんかもういろいろググっててんけどマジでだれてきた。うごくサムネ、また今度にしよっかな
ベトナムのごはん
晩御飯はホテルの下のタイ料理レストランで食べた。ベトナムの感覚からいったらちょっと高め。でも空芯菜とニンニクの相性はいつでもいいものだなあと。緑色のごはんはいいかんじにパラパラしててよかった。海鮮系の具材とかも入ってて気に入ったかも

pornhubAPIを完全に自作しはじめた

継続したブログ記事て書いとくとあとで見返しやすいかなって思って書き出した。SKKでHTML編集、やりにくくてしょうがないから、飽きたらはてな記法で書くかもしれない

pornder開発

pornderではnpmで配布されているpornhubのためのライブラリbowwow-pornhub-apiを使っている。これ単体でフロントでは使えないので、expressを使って簡単につくったrestAPIをherokuに置いて、それを取りにいっている。要はライブラリ→自作API→フロントって感じでひとつ余計なものを挟んでいる

 

pornhubAPI自体の機能としては、

  • AVのカテゴリを元に検索(「おっぱい」「レズ」とかで動画検索できる)
  • 動画のタイトル、URL、サムネ(これに関しては、ひとつだけじゃなくて動画中のやつを複数取ってきてくれる!すごい)、評価とか動画時間とか画質とか....
  • 動画自体の検索(動画のユニークなキーからできたりする)

んでこれをexpressのGETで渡すようにして(その際にpornderで使うためにjsonデータの整形とかいろいろするけど)るだけで本来は中間のrestAPIが邪魔。pornderの表示を高速化するためにいろいろやってるけど、明かにここが速度の邪魔をしてる。

 

もうそれやったら、ライブラリ使わずに直接expressでpornhubのデータを取ってきて渡すか!ってなってきた

スクレイピングってのがあるらしいな?

適当にpornhub上のデータをスクレイピングしてやってみるか、って思った。

スクレイピングって聞いても、同じシェアハウスの人間がpythonでなんかいろいろやってたりしてたって記憶しかないし、まったくわからん。要はURL先のhtml見てタグを元いるやつだけ抽出したらいいんじゃないの。しらんけど

 

qiita.com

nodeJSでのスクレイピングについてぐぐってたらこれ見付けたので、紹介されてたcheeriojsってやつ使ってみる。

jQueryライクに書ける

 みたいなこと書いてあって、jQuery書こうともしなかったし、周りの声から敬遠してたのでちょっと嫌だったけどこれでいこうとおもう。ていうかスクレイピングのためのライブラリ、どれもjQueryっぽく書けるぜ!!ってやつばっかなんだけどなんで?

cheeriojs,どうやら正確にはスクレイピングのためのライブラリというよりかはHTMLの解釈のためのライブラリらしい。クラス名とかのやつかな?

qiita.com

とりあえずこれ見て、適当な映画のタイトルを取得するのはできた。まだ複雑な部分指定とかはよくわからんけどまあなんとかなるでしょ。

んでこの要領でpornhubのURLを指定してスクレイピングしようとしたんだけどできない。なんも帰ってこん。なんかいろいろやって、もうめんどくさかったので前使ってたpornhubAPIのgithubリポジトリ内のindex.jsを覗いたらhttps://jp.pornhub.com/webmasters/search こんな文字列を見付けた。内容もビンゴ!(さっきのリンク先見てみて(jsonがぶわって表示されるだけなので安心してください))それっぽいjson形式の文字列がならんでる。cheerioでアクセスしてみても全部取れる。

内容としてはpornhub上のカテゴリの一部が表示されてるっぽい。githubでこのURLが格納されてた変数名もvideoSearchBaseURLってやつだったのでこれを元に動画の検索とかできるんじゃないかなあ。

githubにあがってるのを読みこんでみたらもっといいかもしれない

SKK日本語入力システムを使ってみました

昨日の夜,学校内のSlackで僕がこのまえ作ったオレオメーカーに「KKTだとレがタイプできない」っていうのが寄せられたんですよ.そんでKKTとはなんぞやと.

オレオメーカーについてはこちらを参照下さい

ten0313.hateblo.jp

どうやら日本語入力システムのひとつらしいぞと

dic.nicovideo.jp

ニコ百科が一番わかりやすかったです.

結構要約されている解説を僕がもっと噛み砕くと,いつも使っているキーボードの漢字変換や片仮名変換ってシステムが「形態素変換」という技を使ってスペースキーが押された時や変換キーが押された時に漢字に変えられたりしているらしいんですね.

でもまあ偶にシステム側が間違えたりすることあるじゃないですか,代表的なところでいうと「ここではきものをおぬぎください」だとか.

要はシステムがどこからどこまでを漢字にするか判断ミスすることがあるよねって話です.そこででてくるのがSKKです.

 

形態素変換を人力でやりましょう

って書くと仰々しいですね.いつも普段の我々がやっていることです.

どこからどこまでを変換するかをマシンの判断に委ねることなく人間がキーボードを打ちながら逐一コンピュータにここを変換してくれって指令をだしていく方式なんですね(なんか言い方マズかったらごめん).

早速タイピングしていきましょう

 

いざSKKを使ってみる

mlny.info

導入はこれがわかりやすかったです.がんばって.

まず前提条件として,SKKの変換にはShiftキーが大きく関わってきます.

最初に「雨上がりに虹が見えました」って打ってみますか.

 

「AmeaGariniNiji gaMiEmasita」これで打てているはずです.

まず「AmeaGa」,これで「雨上が」が出ますね.

Shiftキーを押しながらaで変換モードに移行,その後のShiftを押しながらのgで変換モードを終了させ自動的に変換されタイプ完了になります.

そのあとに続く「Niji」ですが,これはこれ単体で変換させたいので,なにかをShiftキーを押しながら打つこともなくスペースキーを押して変換モードの終了を行ないます.

「雨上が」とか,送り仮名を考える必要があるのとか,少しコツがいりますね.

 

片仮名平仮名の切り替えはqキーでできます.

アルファベットとか打ちたくなったら,変換モードじゃない時にlキーを,日本語に戻したくなったらCtrlとjキー同時押しでできます.

まとめ

正直まだ慣れていないです.

でも,多分これ慣れたらめちゃくちゃタイピング早くなるんじゃないかなってめっちゃ期待しています.

ニコニコ大百科で「Shiftキーを多用するので腱鞘炎マッハ」って言われてましたが,少し理解できそうです.今まで使っていたMozcが忘れられずつい癖で変換後にEnterを押してしまい無駄な改行が増えてしまうのは今の課題ですね.

後,BackSpaceキー横の¥キー押してしまうと「Kuten([MM]KKTT) 」ってなってしまうのってなんか対策ありませんか?

SKK,確実に英字キーボードの方が向いていると思うので購入も考えています.

 

この記事一本SKKで書いたのすごない?

 

 

[ この記事はブログ投稿者の憶測や考えによりつくられています。

よって書いてある内容に誤りや言い間違いがあるかもしれません。もし修正したほうがいい場所や「こういった言い方のほうが”ソレっぽい”よ」などがありましたら後に記載してあります、リンク先のツイッターアカウントに教えてくださると嬉しいです:) ]

 

twitter.com

好みのオレオが作れるWebサービス『オレオメーカー』を作った

久々に「何か作った」って題材でブログが書けるのが嬉しいです、神に感謝!!!

この前こんなツイートを見ました。

 めちゃくちゃ可愛い絵ですね。このオレオレオのアイデア(めっちゃ既出っぽいネタなに思えるんですけどやっぱり元ネタとかあるんですかね)

めちゃくちゃ気に入ったので好きにオレオを作れるオレオメーカーを作りました。

OREO.maker

これです。

 

遊んでみます

実際にリンク先のオレオメーカーを使って、僕直々に超危険なWebサービスであるオレオメーカーのスマートな使いこなし方を伝授しようと思います。

f:id:ten0313:20190104032931j:plain

まず、これはオレオです。

いいですね?基本がこれです。まずはオレオ。

f:id:ten0313:20190104034013j:plain

​一気に楽しくなってきました。これは何でしょう?

そう、オレレレレレレレレレレオです。オレレレレレレレレレレオ。

もうなんか大体オレオメーカーの使い方がわかってきましたか?

以上です。画面下部の小さなテキストボックスに"オ"もしくは"レ"をタイプすることで画面中央のボックスにオレオが形成サれていきます。

フリック操作、キーボード操作のどちらににも対応しています。

まとめ

ちなみにこのサービスは大晦日からさっきまでの約3日で作られました。

Reactで書かれ、Firebase上で動いています。

GithubPagesにデプロイしようともしたのですがnpm周りでごたつきめちゃくちゃめんどくさそうだったので断念しました。

いつも製作にまつわる技術関係のはなしをまとめに書いていたのですが、今回はめちゃくちゃ長くないそうなので別の記事にいろいろ書きたいとおもいます。

オレオメーカー、まだ共有機能とか全然なので適当にスクショするなりしてツイートでもしといてください。

OREO.maker

f:id:ten0313:20190104035824j:plain

ちなみに,これはオレレオレオオレレオレオオオレオオオ....

 

[ この記事はブログ投稿者の憶測や考えによりつくられています。

よって書いてある内容に誤りや言い間違いがあるかもしれません。もし修正したほうがいい場所や「こういった言い方のほうが”ソレっぽい”よ」などがありましたら後に記載してあります、リンク先のツイッターアカウントに教えてくださると嬉しいです:) ]

 

twitter.com