VIEWSTATE へのインデックスアクセスをやめたい

すばる / su8ru


2025-03-30 | 限界 LT #6

https://slides.su8ru.dev/250330-glt06

2025-03-30 | 限界 LT #6
VIEWSTATE へのインデックスアクセスをやめたい | su8ru

自己紹介

すばる / su8ru

  • 北海道大学工学部
    情報エレクトロニクス学科 2 年
  • HUIT 部長 / 3D 研 / JagaJaga (Hupass)
  • Twitter: @su8ru_n <- New!!
  • GitHub: @su8ru
  • すきなもの:TypeScript / 初音ミク / 鏑木ろこ / ヰ世界情緒
  • お仕事でフロントエンドを、趣味でバックエンドを書いています
2025-03-30 | 限界 LT #6
VIEWSTATE へのインデックスアクセスをやめたい | su8ru

北大生による、北大生のための時間割アプリ

2025-03-30 | 限界 LT #6
VIEWSTATE へのインデックスアクセスをやめたい | su8ru
2025-03-30 | 限界 LT #6
VIEWSTATE へのインデックスアクセスをやめたい | su8ru
2025-03-30 | 限界 LT #6
VIEWSTATE へのインデックスアクセスをやめたい | su8ru

シラバスを検索できる

→ シラバスを取ってくる必要がある

2025-03-30 | 限界 LT #6
VIEWSTATE へのインデックスアクセスをやめたい | su8ru
2025-03-30 | 限界 LT #6
VIEWSTATE へのインデックスアクセスをやめたい | su8ru
2025-03-30 | 限界 LT #6
VIEWSTATE へのインデックスアクセスをやめたい | su8ru
from collections import deque

from viewstate import ViewState

def parse_viewstate(encoded_viewstate):
    vs = ViewState(encoded_viewstate)
    data = vs.decode()

    # TODO: 本当にひどいのでなんとかしたい。。。
    classinfo = data[0][1][1][1][1][1][1][3][1][1][1][1][1]
    baseinfo = classinfo[3][1][1][1][1][1][1][1]

    for i in range(len(baseinfo) // 2):
        if not (baseinfo[2 * i + 1][0] is None) and False in baseinfo[2 * i + 1][0]:
            continue
        arraylist = baseinfo[2 * i + 1][1]

        ()

    return data
2025-03-30 | 限界 LT #6
VIEWSTATE へのインデックスアクセスをやめたい | su8ru

VIEWSTATE があまりに曲者

なんですが、使わないといけない理由もある

2025-03-30 | 限界 LT #6
VIEWSTATE へのインデックスアクセスをやめたい | su8ru
  • Hupass では授業の主キーを自分たちで採番している
  • スクレイピングごとにシラバス側を正として上書きしている

→ 判別するためのキーとして時間割番号が必要!!!

2025-03-30 | 限界 LT #6
VIEWSTATE へのインデックスアクセスをやめたい | su8ru

なんですが

2025-03-30 | 限界 LT #6
VIEWSTATE へのインデックスアクセスをやめたい | su8ru

普通に検索すると時間割番号が出てこない(なんで??)

2025-03-30 | 限界 LT #6
VIEWSTATE へのインデックスアクセスをやめたい | su8ru

なので、どうにかうまく付き合う方法を考えながら

インデックスアクセスを続けています

2025-03-30 | 限界 LT #6
VIEWSTATE へのインデックスアクセスをやめたい | su8ru

おわり

2025-03-30 | 限界 LT #6