Most xkcd comics have a transcript posted on xkcd. This info covers details like the comics title, the date and link to the image and the title text. The xkcd about page says:
Is there an interface for automated systems to access comics and metadata?
- Yes. You can get comics through the JSON interface, at URLs like https://xkcd.com/info.0.json (current comic) and https://xkcd.com/614/info.0.json (comic #614).
The official transcript is different from the ones on Explain xkcd, which are more detailed and descriptive. Randall occasionally cites Explain xkcd for the transcript, like for the comic 1461: Payloads. You can find more information in the comic's trivia section.
End of transcripts
| This explanation may be incomplete or incorrect: Does anybody know why the code block at the end of the page doesn't work? I've tried everything and it still looks like plain text|
If you can address this issue, please edit the page! Thanks.
Using the mentioned method, the last available transcript on xkcd for 1608: Hoverboard can be found at https://xkcd.com/1608/info.0.json. However, an error occurred during the combination of transcripts with other details. The subsequent two comics after Hoverboard do not have transcripts, only the accompanying details such as title, date, and title text. Then, the transcripts resumed, but for the comic released two numbers prior. Therefore, the transcript for 1609: Food Combinations, which should have been on https://xkcd.com/1609/info.0.json, was instead "released" on https://xkcd.com/1611/info.0.json, where the transcript for 1611: Baking Soda and Vinegar should have been. The pattern continued, and the last comic with a transcript is 1674: Adult, with the transcript for that comic found three comics later under 1677: Contrails on https://xkcd.com/1677/info.0.json. After 1674: Adult, no more transcripts have been provided.
This python script (public domain) can be used to quickly verify if and where new transcripts have been added:
#!/usr/bin/env python3 import requests import sys last_known_transcript = 1677 latest = requests.get(url='https://xkcd.com/info.0.json').json()['num'] new_transcripts = False for i in range(latest, last_known_transcript, -1): sys.stderr.write('.') sys.stderr.flush() if requests.get(url='https://xkcd.com/'+str(i)+'/info.0.json').json()['transcript'] != '': print("\n", i, "has a transcript") new_transcripts = True print() if not new_transcripts: print("no new transcripts have been added")