なんちゃって鶯教

このページを印刷

mixiに自動にログインして日記を更新する方法

Googleブックマークに登録
Yahoo!ブックマークに登録

MIXIに自動ログインして日記を更新するスクリプトを作成しました。
pymixi プロジェクト日本語トップページのコードを参考に丸々修正しました。

用途

Blogや他の日記サービスをメインに使っており、mixiの日記を更新するのが面倒な人向け。

利用方法

  • (1) Python3をインストール
  • (2) mixiのアカウントを取得
  • (3) 取得したmixiのアカウントの「メールアドレス」「パスワード」を記述
  • (4) 以下のコマンドで動作
% $HOME/local/bin/python3 mixi.py

なお、Python3のインストール方法、Python2との差分に関しては「UnicodeEncodeError: に悩まされない。Python2.x から Python3.x への乗り換え」を参照してください。

ソースコード

ダウンロード先はmixi.pyです。(UTF-8形式で保存してください)

#!/usr/local/bin/python
# -*- coding: utf-8 -*-

import urllib.request, urllib.parse, urllib.error, re, time, warnings
from http.cookiejar import CookieJar
from urllib.request import HTTPCookieProcessor

############################
# Variables
############################
__version__  = '1.0'

MIXI_BASE_URL = "http://mixi.jp"

############################
# Classes
############################
class LoginFailure(Exception):
    """
    ログインに失敗したときに送出される例外クラス
    """

class MIXI:
    """
    MIXI クラス
    """
    ############################
    # Internal Class Methods
    ############################
    def __init__(self):
        self.opener = urllib.request.build_opener(HTTPCookieProcessor(CookieJar()))
        self.mixiid = None

    def _post_diary(self, mixiid, title, body, submit="main", postkey=""):
        params = urllib.parse.urlencode({"id": mixiid,
                                         "diary_title": title,
                                         "diary_body": body,
                                         "submit": submit,
                                         "post_key": postkey}).encode('utf-8')
        try:
            f = self.opener.open("%s/add_diary.pl" % MIXI_BASE_URL, params)
            data = f.read().decode("euc-jp")
            f.close()
            return data
        except:
            print('url open error')
            return None

    def post_diary(self, title, body):
        html = self._post_diary(self.mixiid, title, body)
        if html == None:
            return False
        postkey = re.search('post_key" value="([^"]*)"', html).group(1)
        html = self._post_diary(self.mixiid, title, body, "confirm", postkey)
        if html == None:
            return False
        return True

    ############################
    # Class Methods
    ############################
    def login(self, email, passwd):
        """
        mixi にログインするためのメソッド
        BF_SESSION の中に mixiid が含まれているので Cookie 確認

  • email: ログインするための E-mail アドレス
  • password: ログインするためのパスワード

""" params = urllib.parse.urlencode({"email": email, "password":passwd, "next_url":"home.pl"}).encode('utf-8') try : response = self.opener.open("%s/login.pl" % MIXI_BASE_URL, params) c = response.getheader("Set-Cookie") # 先頭から";"まで取り出す c = c[:c.find(";")] if c.find("session=") == 0: l = len("session=") self.mixiid = c[l:c.find("_", l)] response.close() except: print('url open error') raise LoginFailure # 別ファイルにする場合には必要 #from mixi import MIXI m = MIXI() m.login("メールアドレス", "パスワード") m.post_diary('python3から自動登録テスト'.encode('euc-jp'), '成功!'.encode('euc-jp'))

まとめ

mixiの日記更新以外にもスクレイピング(ウェブサイトのデータを必要な部分だけ抽出して利用すること)として色々と活用できると思います。

このソースコードが行なっている事は、mixiに自動ログインした後に日記ページに指定した文字列をpostしています。