0
2

応用情報技術者試験の過去問を全取得する

Posted at

R5秋期のAP直前なので(直前すぎますがw)過去問をしようということになりました。

でも、一つ一つダウンロードするのは面倒くさい!ということでPythonを使って一括ダウンロードしてみました
同様の記事はたくさんありますが、IPAのホームページが最近更新された影響でその方法ではできなくなってるっぽいので新たに書いてみました。

全体のソースコード

全体のソースコードはこんな感じです

from os import makedirs, path
from time import sleep
from urllib.request import urlretrieve

ids = [
    ["ps6vr70000010d6y-att", "2023r05h_ap_"],
    ["gmcbt80000008smf-att", "2022r04a_ap_"],
    ["gmcbt80000009sgk-att", "2022r04h_ap_"],
    ["gmcbt8000000apad-att", "2021r03a_ap_"],
    ["gmcbt8000000d5ru-att", "2021r03h_ap_"],
    ["gmcbt8000000d05l-att", "2020r02o_ap_"],
    ["gmcbt8000000dict-att", "2019r01a_ap_"],
    ["gmcbt8000000ddiw-att", "2019h31h_ap_"],
    ["gmcbt8000000f01f-att", "2018h30a_ap_"],
    ["gmcbt8000000fabr-att", "2018h30h_ap_"],
    ["gmcbt8000000fqpm-att", "2017h29a_ap_"],
    ["gmcbt8000000fzx1-att", "2017h29h_ap_"],
    ["gmcbt8000000g6fw-att", "2016h28a_ap_"],
    ["gmcbt8000000gn5o-att", "2016h28h_ap_"],
    ["gmcbt8000000gxj0-att", "2015h27a_ap_"],
    ["ug65p90000000f52-att", "2015h27h_ap_"],
    ["ug65p90000000ye5-att", "2014h26a_ap_"],
    ["ug65p90000001dzu-att", "2014h26h_ap_"],
    ["ug65p900000027za-att", "2013h25a_ap_"],
    ["ug65p90000002e6g-att", "2013h25h_ap_"],
    ["ug65p90000002h5m-att", "2012h24a_ap_"],
    ["ug65p900000038er-att", "2012h24h_ap_"],
    ["ug65p90000003ojp-att", "2011h23a_ap_"],
    ["ug65p90000003ya2-att", "2011h23tokubetsu_ap_"],
    ["ug65p90000004d6f-att", "2010h22a_ap_"],
    ["ug65p90000004n2z-att", "2010h22h_ap_"],
    ["gmcbt8000000f3yi-att", "2009h21a_ap_"],
    ["ug65p90000009bhl-att", "2009h21h_ap_"]]

fileTypes = [["am_qs", "am_ans", "pm_qs", "pm_ans"],
             ["AM_問題", "AM_解答", "PM_問題", "PM_解答"]]

baseUrl = "https://www.ipa.go.jp/shiken/mondai-kaiotu/"

for id in ids:
    # 季節を特定する
    filetmp = (id[1])[7]
    if filetmp == "h":
        filetmp = "春季"
    elif filetmp == "a":
        filetmp = "秋季"
    else:
        filetmp = "特別"
    createDir = f"./ap/{(id[1])[0:4]}/{filetmp}"
    # ディレクトリが存在するか判定
    if not path.exists(createDir):
        makedirs(createDir)

    for i, fileType in enumerate(fileTypes[0]):
        url = f"{baseUrl}{id[0]}/{id[1]}{fileType}.pdf"
        filen = f"{(id[1])[0:4]}{filetmp}-{fileTypes[1][i]}.pdf"
        urlretrieve(url, f"{createDir}/{filen}")
        print(f"{filen} saved successflly.")
        sleep(3)
print("ok")

応用方法

過去問のリンクは以下の形式なので、
h ttps://www.ipa.go.jp/shiken/mondai-kaiotu/{①}/{②}{③}{④}_{⑤}_{⑥}_{⑦}.pdf

  1. 年度に固有な文字列
    上記コードの「ids」各要素の0番地の文字列

  2. 西暦

  3. 和暦
    令和5年→r05、平成22年→h22にする

  4. 季節

    季節 URLの文字
    春季 s
    秋季 a
    特別試験 tokubetsu
  5. 試験区分

    試験区分 URLの文字
    応用情報技術者試験 ap
    ITストラテジスト試験 st
    システムアーキテクト試験 sa
    プロジェクトマネージャ試験 pw
    ネットワークスペシャリスト試験 nw
    データベーススペシャリスト試験 db
    エンベデッドシステムスペシャリスト試験 es
    ITサービスマネージャ試験 sm
    システム監査技術者試験 au
    情報処理安全確保支援士試験 sc

    ただし、高度試験の午前Iは全て同じなので、「koudo」を指定
    試験によって実施しない回があるのでその辺りの処理は必要です

  6. 時間帯

    時間帯 URLの文字
    午前 am
    午後 pm
    午前I(高度共通) am1
    午前Ⅱ am2
    午後I pm1
    午後Ⅱ pm2
  7. 種類

    種類 URLの文字
    問題 qs
    解答 ans
    採点講評 cmnt

使っていただけると幸いです!

0
2
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
0
2