4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

electronでニコニコ垂れ流しプレイヤーを作ろうとしてハマったことまとめ

Last updated at Posted at 2017-10-21

#導入
先日electronでゲームの専ブラを作ったのですが、引き続きelectronで遊んでます
普段作業中はBGVにニコニコ動画を垂れ流しているのでそのプレイヤーなんかほしいですね、作りましょう

##electronでニコニコを開いたあとに別のブラウザで開くとまたログインしなおさなきゃならなくて面倒だ
→chromeのcookieを持ってこよう
→chromeのcookieはSQLiteらしい
→ライブラリを使おう
→ハマる

##まずはSQLite
ぐぐるといっぱい出てくるのですがことelectronでSqlite3を使おうとすると面倒なようです
かといってC#とかわからないのでなんとか導入しました
参考にした記事→Windows 上で Electron + sqlite3 のアプリを動かそうとするとエラーになる場合の対処法

##cookieを復号
で、ChromeのCookieは暗号化されているので復号しましょう
こちらのページを参考にpythonで書くことにします、python知らないけど

###pythonでエラー
で、まあ出ますよね、まるまるコピペしたコードですしね
とりあえず最終的なコードを下に書いておきます 石は投げないでくだちい

sample.py
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にねじこんでからニコニコのページを表示させる的な動きをさせてるけどもうちょっとましな実装にしたいです

また何かはまったら書きます

4
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?