ナツぬいと一緒にpixivのブクマを見返していました。
削除済み 非公開となってそこに何があったのかすら思い出せない、泣きゲーの結末のような儚さがありますよね。ですが、往生際が悪いのがオタクの性というものです。なんとかしてサルベージする方法を検討してみました。
まず、ブックマークした作品であるとF12で開発者ツールを開いて該当箇所にカーソルを合わせれば作品IDが分かります。(スマホの場合は長押しすると分かったりします。)作品IDを取得できたら pixiv artworks 1145141919(作品ID) みたいな感じでgoogle検索をしてみてください。運が良ければNozomi.la sankaku complex danbooru等に無断転載されたものが見つかります。見つからなかった場合はyandexとbaiduでも一応検索してみてください。もしかしたらweiboにあるかもしれません。あるいはXで検索するのも一つの手です。作者がそっちで公開している可能性もミリ単位であります。
もしそれでも見つからなかった場合は、魚拓が取られている可能性に賭けて、archive.isとmegalodonで検索してみてください。ナツぬい編集部ではpixivの投稿をarchive.todayでアーカイブしよう運動を奨励しております。
まあここまでのサルベージ方法なら知ってる方が大半だと思います。 なのでもう少し踏み込んだ内容を。
海外のギーク・ナードなら何かしら新規性のある方法を見つけているのではないと思いredditを読んでいたところ気になる書き込みを見つけました。
pixivの画像は削除されたとしてもサーバーには保存されているようです。
ttps://i.pximg.net/img-original/img/year/month/day/hours/mins/secs/<ID>.{extension}
これがpximg側のCDNのアドレスらしいですね。 ブクマの削除された作品もIDは取得できるので、その前後IDの投稿時間から絞り込みを行って総当たりを行えばワンチャン復元できる可能性があります。
ナツぬいと一緒にこの手法を試してみました。
https://www.pixiv.net/artworks/128906393 が削除済みで、これの投稿時間を前後128906392-128906394の投稿時間で絞ってスクリプトで総当たりしたところ、
https://i.pximg.net/img-original/img/2025/04/03/13/50/19/128906393_p0.jpg
を得ました。
10%くらいの確率で復元できると思います。 それでは、良きpixivライフを
以下、チャッピー製の自動発掘スクリプトです。
import tkinter as tk
from tkinter import messagebox
from datetime import datetime, timedelta
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from time import sleep
driver = None # ← グローバルで保持!
def generate_candidate_times(before_str, after_str):
before = datetime.strptime(before_str, “%Y/%m/%d/%H/%M/%S”)
after = datetime.strptime(after_str, “%Y/%m/%d/%H/%M/%S”)
times = []
t = before # ← 開始を「beforeちょうど」に変更
while t <= after: # ← 「after秒」も含める
times.append(t.strftime(“%Y/%m/%d/%H/%M/%S”))
t += timedelta(seconds=1)
return times
def open_urls():
global driver # ← ここで global 宣言
try:
pixiv_id = int(entry_id.get())
before_time = entry_before.get()
after_time = entry_after.get()
extensions = [“.jpg”, “.png”]
before_id = pixiv_id – 1
after_id = pixiv_id + 1
candidate_times = generate_candidate_times(before_time, after_time)
options = Options()
options.add_argument(“–start-maximized”)
driver = webdriver.Chrome(options=options)
driver.get(“https://www.pixiv.net/”)
sleep(2)
for t in candidate_times:
for ext in extensions:
url = f”https://i.pximg.net/img-original/img/{t}/{pixiv_id}_p0{ext}”
driver.execute_script(f”window.open(‘{url}’, ‘_blank’);”)
sleep(1.2)
messagebox.showinfo(“完了”, f”Pixiv ID {pixiv_id} の候補URLをすべて開きました!\nChromeウィンドウは閉じません。”)
except Exception as e:
messagebox.showerror(“エラー”, str(e))
# GUI構築
root = tk.Tk()
root.title(“Pixiv CDN探索ツール”)
tk.Label(root, text=”Pixiv ID:”).grid(row=0, column=0, padx=10, pady=5, sticky=”e”)
entry_id = tk.Entry(root, width=30)
entry_id.grid(row=0, column=1, padx=10, pady=5)
tk.Label(root, text=”前の投稿時刻 (YYYY/MM/DD/HH/MM/SS):”).grid(row=1, column=0, padx=10, pady=5, sticky=”e”)
entry_before = tk.Entry(root, width=30)
entry_before.grid(row=1, column=1, padx=10, pady=5)
tk.Label(root, text=”後の投稿時刻 (YYYY/MM/DD/HH/MM/SS):”).grid(row=2, column=0, padx=10, pady=5, sticky=”e”)
entry_after = tk.Entry(root, width=30)
entry_after.grid(row=2, column=1, padx=10, pady=5)
tk.Button(root, text=”探索開始”, command=open_urls, width=20).grid(row=3, column=0, columnspan=2, pady=15)
root.mainloop()
コメント