#導入
先日electronでゲームの専ブラを作ったのですが、引き続きelectronで遊んでます
普段作業中はBGVにニコニコ動画を垂れ流しているのでそのプレイヤーなんかほしいですね、作りましょう
##electronでニコニコを開いたあとに別のブラウザで開くとまたログインしなおさなきゃならなくて面倒だ
→chromeのcookieを持ってこよう
→chromeのcookieはSQLiteらしい
→ライブラリを使おう
→ハマる
##まずはSQLite
ぐぐるといっぱい出てくるのですがことelectronでSqlite3を使おうとすると面倒なようです
かといってC#とかわからないのでなんとか導入しました
参考にした記事→Windows 上で Electron + sqlite3 のアプリを動かそうとするとエラーになる場合の対処法
##cookieを復号
で、ChromeのCookieは暗号化されているので復号しましょう
こちらのページを参考にpythonで書くことにします、python知らないけど
###pythonでエラー
で、まあ出ますよね、まるまるコピペしたコードですしね
とりあえず最終的なコードを下に書いておきます 石は投げないでくだちい
import sys
sys.path.append("C:\Program Files (x86)\IronPython 2.7\Lib")
sys.path.append("C:\Program Files (x86)\IronPython 2.7\DLLs")
from ctypes import *
from ctypes.wintypes import DWORD
import traceback;
from System import Array, Byte
class DATA_BLOB(Structure):
_fields_ = [("cbData", DWORD), ("pbData", POINTER(c_char))];
def getData(blobOut):
cbData = int(blobOut.cbData);
pbData = blobOut.pbData;
buffer = c_buffer(cbData);
memcpy(buffer, pbData, cbData);
LocalFree(pbData);
return buffer.raw;
def decrypt(cipherText):
try:
test = str(buffer(cipherText))
bufferIn = c_buffer(test, len(cipherText));
blobIn = DATA_BLOB(len(cipherText), bufferIn);
blobOut = DATA_BLOB();
if CryptUnprotectData(byref(blobIn), None, None, None, None,CRYPTPROTECT_UI_FORBIDDEN, byref(blobOut)):
return getData(blobOut);
else:
raise Exception("Failed to decrypt data");
except TypeError as e:
print("type error")
LocalFree = windll.kernel32.LocalFree;
memcpy = cdll.msvcrt.memcpy;
CryptProtectData = windll.crypt32.CryptProtectData;
CryptUnprotectData = windll.crypt32.CryptUnprotectData;
CRYPTPROTECT_UI_FORBIDDEN = 0x01;
lambda x: decrypt(x)
sys.path.append~を入れないとctypesが動かなかったので入れました
それ以外は参考ページのコピペです、あとできれいにします あとで そのうち たぶん
##Edge.js
pythonで書いたコードをelectronで動かすためにedge.jsを使います
最初普通のedgejsをインストールしてて動かなくて焦った
electronで使うときはelectron-edgeを使うらしいです
##そしてハマり続ける
とりあえずchromeのcookieを持ってくることはできました
今はこれをelectronのwebviewのcookieにねじこんでからニコニコのページを表示させる的な動きをさせてるけどもうちょっとましな実装にしたいです
また何かはまったら書きます