Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import requests
- import json
- import time
- def login_to_api(server_url, email, password):
- print("Attempting to log in...")
- login_url = f"{server_url}/api/auth/login"
- login_payload = json.dumps({"email": email, "password": password})
- login_headers = {'Content-Type': 'application/json'}
- response = requests.post(login_url, headers=login_headers, data=login_payload)
- print(response.text)
- if response.status_code in [200, 201]:
- print(f"Login successful: {response.status_code}")
- return response.json()
- else:
- print(f"Failed to login. Status code: {response.status_code}")
- return None
- def get_personId_time_bucket_assets(server_url, token, personId, time_bucket, size='MONTH'):
- url = f"{server_url}/api/asset/time-bucket"
- headers = {'Authorization': f'Bearer {token}', 'Accept': 'application/json'}
- params = {
- 'personId': personId,
- 'timeBucket': time_bucket,
- 'size': size
- }
- response = requests.get(url, headers=headers, params=params)
- if response.status_code == 200:
- return response.json()
- else:
- print(f"Failed to fetch assets. Status code: {response.status_code}, Response text: {response.text}")
- return []
- def get_time_buckets(server_url, token, user_id, size='MONTH'):
- print("Fetching time buckets...")
- url = f"{server_url}/api/asset/time-buckets"
- headers = {'Authorization': f'Bearer {token}', 'Accept': 'application/json'}
- params = {'userId': user_id, 'size': size}
- response = requests.get(url, headers=headers, params=params)
- if response.status_code == 200:
- print("Time buckets fetched successfully.")
- buckets = response.json()
- print(f"Time buckets: {buckets}")
- return buckets
- else:
- print(f"Failed to fetch time buckets. Status code: {response.status_code}, Response text: {response.text}")
- return []
- def add_assets_to_album(url, token, album_id, asset_ids, key=None):
- url = f"{url}/api/album/{album_id}/assets"
- headers = {
- 'Authorization': f'Bearer {token}',
- 'Content-Type': 'application/json',
- 'Accept': 'application/json'
- }
- payload = json.dumps({"ids": asset_ids})
- params = {'key': key} if key else {}
- print(f"Sending request to {url} with payload: {payload} and params: {params}")
- response = requests.put(url, headers=headers, data=payload, params=params)
- print(response.text)
- print(f"Add assets response: {response.status_code}, Body: {response.text}")
- if response.status_code == 200:
- print("Assets successfully added to the album.")
- return True
- else:
- try:
- error_response = response.json()
- print(f"Error adding assets to album: {error_response.get('error', 'Unknown error')}")
- except json.JSONDecodeError:
- print(f"Failed to decode JSON response. Status code: {response.status_code}, Response text: {response.text}")
- return False
- def chunker(seq, size):
- return (seq[pos:pos + size] for pos in range(0, len(seq), size))
- def main():
- server_url = (https://localhost:port)
- email = (immich login)
- password = (immich pass)
- person_id = (https://localhost:port/people/**this number***)
- album_id = (https://localhost:port/albums/**this number***)
- login_response = login_to_api(server_url, email, password)
- if login_response:
- token = login_response['accessToken']
- user_id = login_response['userId']
- time_buckets = get_time_buckets(server_url, token, user_id, size='MONTH')
- unique_asset_ids = set()
- for bucket in time_buckets:
- assets = get_personId_time_bucket_assets(server_url, token, person_id, bucket['timeBucket'])
- for asset in assets:
- unique_asset_ids.add(asset['id'])
- print(f"Total unique assets: {len(unique_asset_ids)}")
- asset_ids_list = list(unique_asset_ids)
- # print(f"Total unique assets: {len(asset_ids_list)}")
- for asset_chunk in chunker(asset_ids_list, 500):
- add_assets_to_album(server_url,token, album_id, asset_chunk, key=None)
- time.sleep(2)
- else:
- print("Failed to log in; cannot proceed with fetching assets.")
- if __name__ == "__main__":
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement