-
-
Save Tatsh/0b5a10a2d25f6c8466290401d2026055 to your computer and use it in GitHub Desktop.
#!/usr/bin/env python | |
from __future__ import print_function | |
import json | |
import sys | |
from authentication import authenticate | |
from future.moves.urllib.parse import urlencode | |
if __name__ == '__main__': | |
username = sys.argv[1] | |
password = sys.argv[2] | |
smtp_username = smtp_password = smtp_host = smtp_port = smtp_no_tls = notification_email = None | |
print('Logging in') | |
icloud = authenticate(username, password, smtp_username, smtp_password, smtp_host, smtp_port, smtp_no_tls, notification_email) | |
photos = icloud.photos.all | |
operations = [] | |
url = '{}/records/modify?{}'.format(icloud.photos._service_endpoint, urlencode(icloud.photos.params)) | |
headers = {'Content-type': 'text/plain'} | |
seen_record_names = [] | |
for photo in photos: | |
# Avoid duplicate operations | |
if photo._asset_record['recordName'] in seen_record_names: | |
continue | |
seen_record_names.append(photo._asset_record['recordName']) | |
mr = {'fields': {'isDeleted': {'value': 1}}} | |
mr['recordChangeTag'] = photo._asset_record['recordChangeTag'] | |
mr['recordName'] = photo._asset_record['recordName'] | |
mr['recordType'] = 'CPLAsset' | |
op = dict( | |
operationType='update', | |
record=mr, | |
) | |
operations.append(op) | |
# Limit to 100 photos at a time | |
if len(operations) >= 100: | |
post_data = json.dumps(dict( | |
atomic=True, | |
desiredKeys=['isDeleted'], | |
operations=operations, | |
zoneID={'zoneName': 'PrimarySync'}, | |
)) | |
print('Deleting 100 photos') | |
print(icloud.photos.session.post(url, | |
data=post_data, | |
headers=headers).json()) | |
operations = [] |
Installed the 'real' Python for MacOS and along the way, TclTK ( a compatible version). Tweaked my .bashrc to avoid unhappiness resulting from relying on older versions and am ransacking the literature for more clues ...
bugger me for setting up two-factor authentication!
need to rethink approach??
Hi @joryan44, I just found this, and I think they were using my icloud_photos_downloader project as the base for this script. I have an authentication.py
file in there with an authenticate
method, and that takes care of two-factor authentication.
I would try cloning the repo, downloading the script into there, and then running it:
git clone https://github.com/ndbroadbent/icloud_photos_downloader
cd icloud_photos_downloader
curl -sfLO https://gist.github.com/Tatsh/0b5a10a2d25f6c8466290401d2026055/raw/77d23ca0d1448f8e8eb4f208dfcfe84781d98d67/delall-icloud-photos.py
python delall-icloud-photos.py
(Note: I haven't tried the script)
is this still working or does anyone know any other way to delete all icloud photos instead of waiting 30 days before automatically deleted by icloud? I have deleted them from my ios device first but need to wait 30 days to be removed from my icloud account.
Hi, combining the previous comments and making some further changes, the following process worked for me:
git clone https://github.com/ndbroadbent/icloud_photos_downloader
cd icloud_photos_downloader
cd icloudpd
curl -sfLO https://gist.github.com/Tatsh/0b5a10a2d25f6c8466290401d2026055/raw/77d23ca0d1448f8e8eb4f208dfcfe84781d98d67/delall-icloud-photos.py
Change the line:
icloud = authenticate(username, password, smtp_username, smtp_password, smtp_host, smtp_port, smtp_no_tls, notification_email)
to
icloud = authenticate(username, password)
Install icloudpd dependencies by installing icloudpd (Its documentation talks about how to do this)
Finally, run:
python delall-icloud-photos.py
The first time you run this, it will perform two factor authentication.
It will work well afterwards.
i am getting below error
File "delall-icloud-photos.py", line 10, in
username = sys.argv[1]
IndexError: list index out of range
I just had a similar issue. Made a quick script to do it :
https://github.com/zakirangwala/icloud-photo-manager
Complete Python newbie here but delete photos from iCloud to get a clean start is what I want to do.
so here is how I got where I am
copy the delete script to /usr/local/bin (where home-brew lives, that is upstairs in /usr/local) Okay, I am also a newcomer to anything behinds the scenes on MacOS - despite copious years of experience with *nix.
I download, build and install pyicloud on to iMac 10.13.3. I use sudo to install because I am in a hurry, naturally though it might be more prudent make a separate install of python altogether. Could this be my problem? The Apple installed version of Python is 2.7.10
at any rate, the install, like the build (download and so on) goes smoothly , no obvious errors of a show stopping kind.
attempt to run dellall and it promptly complains that authenticate module is not found.
I scour docs.python.org for clues and come up empty
I conclude I have ahem obviously omitted some necessary.
need some help.
--Captain Obvious