2022-02-04 18:01:46 +01:00
<!-- markdownlint - disable MD033 MD041 -->
2020-12-13 18:38:16 +01:00
< div align = "center" >
2020-05-04 17:36:00 +02:00
2021-01-04 20:00:07 +01:00
< img src = "https://raw.githubusercontent.com/akamhy/waybackpy/master/assets/waybackpy_logo.svg" > < br >
2021-01-02 07:50:43 +01:00
2022-03-29 00:09:50 +02:00
< h3 > Python package & CLI tool that interfaces the Wayback Machine APIs< / h3 >
2020-05-05 05:57:02 +02:00
2021-01-04 20:00:07 +01:00
< / div >
2020-10-02 21:46:19 +02:00
2022-01-16 18:31:31 +01:00
< p align = "center" >
2022-01-22 21:56:53 +01:00
< a href = "https://github.com/akamhy/waybackpy/actions?query=workflow%3ATests" > < img alt = "Unit Tests" src = "https://github.com/akamhy/waybackpy/workflows/Tests/badge.svg" > < / a >
2022-02-08 13:19:05 +01:00
< a href = "https://codecov.io/gh/akamhy/waybackpy" > < img alt = "codecov" src = "https://codecov.io/gh/akamhy/waybackpy/branch/master/graph/badge.svg" > < / a >
2022-01-16 18:31:31 +01:00
< a href = "https://pypi.org/project/waybackpy/" > < img alt = "pypi" src = "https://img.shields.io/pypi/v/waybackpy.svg" > < / a >
< a href = "https://pepy.tech/project/waybackpy?versions=2*&versions=1*&versions=3*" > < img alt = "Downloads" src = "https://pepy.tech/badge/waybackpy/month" > < / a >
2022-02-05 05:35:17 +01:00
< a href = "https://app.codacy.com/gh/akamhy/waybackpy?utm_source=github.com&utm_medium=referral&utm_content=akamhy/waybackpy&utm_campaign=Badge_Grade_Settings" > < img alt = "Codacy Badge" src = "https://api.codacy.com/project/badge/Grade/6d777d8509f642ac89a20715bb3a6193" > < / a >
2022-01-16 18:31:31 +01:00
< a href = "https://github.com/akamhy/waybackpy/commits/master" > < img alt = "GitHub lastest commit" src = "https://img.shields.io/github/last-commit/akamhy/waybackpy?color=blue&style=flat-square" > < / a >
< a href = "#" > < img alt = "PyPI - Python Version" src = "https://img.shields.io/pypi/pyversions/waybackpy?style=flat-square" > < / a >
2022-01-24 09:16:31 +01:00
< a href = "https://github.com/psf/black" > < img alt = "Code style: black" src = "https://img.shields.io/badge/code%20style-black-000000.svg" > < / a >
2022-01-16 18:31:31 +01:00
< / p >
2022-02-04 18:01:46 +01:00
---
2022-02-08 07:13:32 +01:00
# <img src="https://github.githubassets.com/images/icons/emoji/unicode/2b50.png" width="30"></img> Introduction
2020-05-05 05:33:16 +02:00
2022-03-15 16:03:51 +01:00
Waybackpy is a Python package and a CLI tool that interfaces with the Wayback Machine APIs.
2022-01-16 18:31:31 +01:00
2022-03-29 00:09:50 +02:00
Internet Archive's Wayback Machine has 3 useful public APIs.
2022-01-16 18:31:31 +01:00
2022-03-15 16:03:51 +01:00
- SavePageNow or Save API
- CDX Server API
- Availability API
2022-01-16 18:31:31 +01:00
2022-03-15 16:03:51 +01:00
These three APIs can be accessed via the waybackpy either by importing it from a python file/module or from the command-line interface.
2022-01-16 18:31:31 +01:00
2022-02-08 07:13:32 +01:00
## <img src="https://github.githubassets.com/images/icons/emoji/unicode/1f3d7.png" width="20"></img> Installation
2020-10-02 20:04:06 +02:00
2022-01-26 11:10:33 +01:00
**Using [pip ](https://en.wikipedia.org/wiki/Pip_(package_manager )), from [PyPI ](https://pypi.org/ ) (recommended)**:
2020-10-02 20:04:06 +02:00
2020-07-18 04:46:59 +02:00
```bash
2022-03-29 00:09:50 +02:00
pip install waybackpy -U
2020-07-18 04:46:59 +02:00
```
2020-10-02 20:04:06 +02:00
2022-01-26 19:47:36 +01:00
**Using [conda ](https://en.wikipedia.org/wiki/Conda_(package_manager )), from [conda-forge ](https://anaconda.org/conda-forge/waybackpy ) (recommended)**:
2022-01-26 11:10:33 +01:00
2022-01-26 11:15:03 +01:00
See also [waybackpy feedstock ](https://github.com/conda-forge/waybackpy-feedstock ), maintainers are [@rafaelrdealmeida ](https://github.com/rafaelrdealmeida/ ),
[@labriunesp ](https://github.com/labriunesp/ )
and [@akamhy ](https://github.com/akamhy/ ).
2022-01-26 11:10:33 +01:00
```bash
2022-01-26 19:47:36 +01:00
conda install -c conda-forge waybackpy
2022-01-26 11:10:33 +01:00
```
**Install directly from [this git repository ](https://github.com/akamhy/waybackpy ) (NOT recommended)**:
2020-10-02 20:04:06 +02:00
2020-07-22 18:05:02 +02:00
```bash
pip install git+https://github.com/akamhy/waybackpy.git
```
2020-05-04 17:36:00 +02:00
2022-02-08 07:13:32 +01:00
## <img src="https://github.githubassets.com/images/icons/emoji/unicode/1f433.png" width="20"></img> Docker Image
2022-01-26 11:10:33 +01:00
2022-03-15 16:03:51 +01:00
Docker Hub: [hub.docker.com/r/secsi/waybackpy ](https://hub.docker.com/r/secsi/waybackpy )
2022-01-02 09:44:45 +01:00
2022-03-15 16:03:51 +01:00
Docker image is automatically updated on every release by [Regulary and Automatically Updated Docker Images ](https://github.com/cybersecsi/RAUDI ) (RAUDI).
2022-01-16 18:31:31 +01:00
2022-03-15 16:03:51 +01:00
RAUDI is a tool by [SecSI ](https://secsi.io ), an Italian cybersecurity startup.
2021-01-11 18:31:18 +01:00
2022-02-08 07:13:32 +01:00
## <img src="https://github.githubassets.com/images/icons/emoji/unicode/1f680.png" width="20"></img> Usage
2021-01-11 18:31:18 +01:00
2022-02-04 18:01:46 +01:00
### As a Python package
2020-10-02 21:46:19 +02:00
2022-02-04 18:01:46 +01:00
#### Save API aka SavePageNow
2022-01-18 16:14:47 +01:00
```python
>>> from waybackpy import WaybackMachineSaveAPI
2022-01-18 16:28:39 +01:00
>>> url = "https://github.com"
2022-01-18 16:14:47 +01:00
>>> user_agent = "Mozilla/5.0 (Windows NT 5.1; rv:40.0) Gecko/20100101 Firefox/40.0"
2022-01-21 22:38:26 +01:00
>>>
2022-01-18 16:28:39 +01:00
>>> save_api = WaybackMachineSaveAPI(url, user_agent)
>>> save_api.save()
https://web.archive.org/web/20220118125249/https://github.com/
>>> save_api.cached_save
False
>>> save_api.timestamp()
datetime.datetime(2022, 1, 18, 12, 52, 49)
2022-01-18 16:14:47 +01:00
```
2022-02-18 11:35:58 +01:00
#### CDX API aka CDXServerAPI
2022-02-04 18:01:46 +01:00
2022-01-18 16:14:47 +01:00
```python
2022-02-18 11:35:58 +01:00
>>> from waybackpy import WaybackMachineCDXServerAPI
2022-01-18 16:14:47 +01:00
>>> url = "https://google.com"
2022-02-18 11:35:58 +01:00
>>> user_agent = "my new app's user agent"
>>> cdx_api = WaybackMachineCDXServerAPI(url, user_agent)
2022-01-18 16:14:47 +01:00
```
2022-02-18 11:35:58 +01:00
##### oldest
```python
>>> cdx_api.oldest()
com,google)/ 19981111184551 http://google.com:80/ text/html 200 HOQ2TGPYAEQJPNUA6M4SMZ3NGQRBXDZ3 381
>>> oldest = cdx_api.oldest()
>>> oldest
com,google)/ 19981111184551 http://google.com:80/ text/html 200 HOQ2TGPYAEQJPNUA6M4SMZ3NGQRBXDZ3 381
>>> oldest.archive_url
'https://web.archive.org/web/19981111184551/http://google.com:80/'
>>> oldest.original
'http://google.com:80/'
>>> oldest.urlkey
'com,google)/'
>>> oldest.timestamp
'19981111184551'
>>> oldest.datetime_timestamp
datetime.datetime(1998, 11, 11, 18, 45, 51)
>>> oldest.statuscode
'200'
>>> oldest.mimetype
'text/html'
```
##### newest
```python
>>> newest = cdx_api.newest()
>>> newest
com,google)/ 20220217234427 http://@google.com/ text/html 301 Y6PVK4XWOI3BXQEXM5WLLWU5JKUVNSFZ 563
>>> newest.archive_url
'https://web.archive.org/web/20220217234427/http://@google.com/'
>>> newest.timestamp
'20220217234427'
```
##### near
```python
>>> near = cdx_api.near(year=2010, month=10, day=10, hour=10, minute=10)
>>> near.archive_url
'https://web.archive.org/web/20101010101435/http://google.com/'
>>> near
com,google)/ 20101010101435 http://google.com/ text/html 301 Y6PVK4XWOI3BXQEXM5WLLWU5JKUVNSFZ 391
>>> near.timestamp
'20101010101435'
>>> near.timestamp
'20101010101435'
>>> near = cdx_api.near(wayback_machine_timestamp=2008080808)
>>> near.archive_url
'https://web.archive.org/web/20080808051143/http://google.com/'
>>> near = cdx_api.near(unix_timestamp=1286705410)
>>> near
com,google)/ 20101010101435 http://google.com/ text/html 301 Y6PVK4XWOI3BXQEXM5WLLWU5JKUVNSFZ 391
>>> near.archive_url
'https://web.archive.org/web/20101010101435/http://google.com/'
2022-03-29 00:09:50 +02:00
>>>
2022-02-18 11:35:58 +01:00
```
##### snapshots
2021-01-04 20:00:07 +01:00
```python
2022-01-18 16:28:39 +01:00
>>> from waybackpy import WaybackMachineCDXServerAPI
2022-01-18 16:48:17 +01:00
>>> url = "https://pypi.org"
2021-01-04 20:00:07 +01:00
>>> user_agent = "Mozilla/5.0 (Windows NT 5.1; rv:40.0) Gecko/20100101 Firefox/40.0"
2022-01-18 16:48:17 +01:00
>>> cdx = WaybackMachineCDXServerAPI(url, user_agent, start_timestamp=2016, end_timestamp=2017)
>>> for item in cdx.snapshots():
... print(item.archive_url)
2022-01-21 22:38:26 +01:00
...
2022-01-18 16:48:17 +01:00
https://web.archive.org/web/20160110011047/http://pypi.org/
https://web.archive.org/web/20160305104847/http://pypi.org/
.
. # URLS REDACTED FOR READABILITY
.
https://web.archive.org/web/20171127171549/https://pypi.org/
https://web.archive.org/web/20171206002737/http://pypi.org:80/
2020-10-16 19:07:32 +02:00
```
2022-01-18 16:28:39 +01:00
2022-02-18 11:35:58 +01:00
#### Availability API
2022-03-29 00:09:50 +02:00
It is recommended to not use the availability API due to performance issues. All the methods of availability API interface class, `WaybackMachineAvailabilityAPI` , are also implemented in the CDX server API interface class, `WaybackMachineCDXServerAPI` . Also note
2022-03-15 16:03:51 +01:00
that the `newest()` method of `WaybackMachineAvailabilityAPI` can be more recent than `WaybackMachineCDXServerAPI` 's same method.
2022-02-18 11:35:58 +01:00
```python
>>> from waybackpy import WaybackMachineAvailabilityAPI
>>>
>>> url = "https://google.com"
>>> user_agent = "Mozilla/5.0 (Windows NT 5.1; rv:40.0) Gecko/20100101 Firefox/40.0"
>>>
>>> availability_api = WaybackMachineAvailabilityAPI(url, user_agent)
```
##### oldest
```python
>>> availability_api.oldest()
https://web.archive.org/web/19981111184551/http://google.com:80/
```
##### newest
```python
>>> availability_api.newest()
https://web.archive.org/web/20220118150444/https://www.google.com/
```
##### near
```python
>>> availability_api.near(year=2010, month=10, day=10, hour=10)
https://web.archive.org/web/20101010101708/http://www.google.com/
```
2022-01-21 22:38:26 +01:00
> Documentation is at <https://github.com/akamhy/waybackpy/wiki/Python-package-docs>.
2020-10-16 19:07:32 +02:00
2022-02-04 18:01:46 +01:00
### As a CLI tool
2022-01-21 22:38:26 +01:00
2022-02-18 11:35:58 +01:00
Demo video on [asciinema.org ](https://asciinema.org/a/469890 ), you can copy the text from video:
2022-01-21 22:38:26 +01:00
2022-02-18 11:35:58 +01:00
[![asciicast ](https://asciinema.org/a/469890.svg )](https://asciinema.org/a/469890)
2022-01-21 22:38:26 +01:00
2022-01-16 21:45:38 +01:00
> CLI documentation is at <https://github.com/akamhy/waybackpy/wiki/CLI-docs>.
2020-05-04 17:36:00 +02:00
2022-02-04 18:01:46 +01:00
2022-03-29 00:09:50 +02:00
## CONTRIBUTORS
### AUTHORS
- akamhy (< https: // github . com / akamhy > )
- eggplants (< https: // github . com / eggplants > )
- danvalen1 (< https: // github . com / danvalen1 > )
- AntiCompositeNumber (< https: // github . com / AntiCompositeNumber > )
- rafaelrdealmeida (< https: // github . com / rafaelrdealmeida > )
- jonasjancarik (< https: // github . com / jonasjancarik > )
- jfinkhaeuser (< https: // github . com / jfinkhaeuser > )
### ACKNOWLEDGEMENTS
2020-10-02 20:04:06 +02:00
2022-03-29 00:09:50 +02:00
- mhmdiaa (< https: // github . com / mhmdiaa > ) `--known-urls` is based on [this ](https://gist.github.com/mhmdiaa/adf6bff70142e5091792841d4b372050 ) gist.
- dequeued0 (< https: // github . com / dequeued0 > ) for reporting bugs and useful feature requests.