Provenance: kanban t_02148213 (research) -> t_4265c369 (author) -> t_fefdf30b (review). Review verdict: APPROVED-WITH-FIXES, 7/7 checks PASS, 17/17 YouTube links oEmbed-verified, 26+ CLI commands re-run against v0.21.1, no Murray/JDS client data present. Artifact: deliverables/scot-hermes-playbook/HERMES-PLAYBOOK-FOR-SCOT.md 377 lines, sha256 b0966a649fec96da4975ec00e627fbaba3a92a62c4a92b33bc06589c47d25f7f Includes the research dossier and its raw verification evidence under research/. STATUS: written and reviewed, NOT delivered to the client. Delivery is gated on Kwame's approval and tracked as a separate blocked kanban card.
39 lines
1.8 KiB
Python
39 lines
1.8 KiB
Python
import json, subprocess, re, sys
|
|
|
|
vids = ["9GpWELm3_XI","iqN6MVzpJTk","Ta2wg6xPaY4","8tpuky8HpXw","tP6yf22OJdI",
|
|
"UWjh5Z4s8jY","5d02TYoOzfE","83nWNRKZTCE","6M2tItdARew","5_N84t1rUU0",
|
|
"UTZhvPXnmwA","1UgXUjT-QtI","6GtF_uHbGhw","CwPUOVUdApE","sCa3BtpkziQ",
|
|
"jmtpYUOr7_U","cu2fgknmemA","4sAmpcSOVEw","P2LIFtrRr2U"]
|
|
|
|
results = []
|
|
for v in vids:
|
|
url = f"https://www.youtube.com/watch?v={v}"
|
|
oe = subprocess.run(["curl","-s",f"https://www.youtube.com/oembed?url={url}&format=json"],
|
|
capture_output=True, text=True, timeout=30)
|
|
try:
|
|
oej = json.loads(oe.stdout)
|
|
oembed = {"status":"PASS","title":oej.get("title"),"author":oej.get("author_name")}
|
|
except Exception:
|
|
oembed = {"status":"FAIL","raw":oe.stdout[:200]}
|
|
# watch page for date + duration
|
|
wp = subprocess.run(["curl","-s","-L",url,"-H","User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/124.0",
|
|
"-H","Accept-Language: en-US,en;q=0.9"], capture_output=True, text=True, timeout=30)
|
|
html = wp.stdout
|
|
pub = re.search(r'"publishDate":"([\d\-T:Z]+)"', html)
|
|
upd = re.search(r'"uploadDate":"([\d\-T:Z]+)"', html)
|
|
dur = re.search(r'"lengthSeconds":"(\d+)"', html)
|
|
views = re.search(r'"viewCount":"(\d+)"', html)
|
|
results.append({
|
|
"videoId": v, "oembed": oembed,
|
|
"publishDate": pub.group(1) if pub else None,
|
|
"uploadDate": upd.group(1) if upd else None,
|
|
"lengthSeconds": int(dur.group(1)) if dur else None,
|
|
"views": int(views.group(1)) if views else None,
|
|
"watchpage_bytes": len(html),
|
|
})
|
|
print(json.dumps(results[-1]))
|
|
|
|
with open("/home/hermes/syslog/drafts/scot-hermes-playbook/research/video-verification.json","w") as f:
|
|
json.dump(results, f, indent=2)
|
|
print("saved video-verification.json")
|