Update script
This commit is contained in:
parent
3b29889c36
commit
8a90af6d4f
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
.idea
|
17
README.md
17
README.md
@ -1,17 +0,0 @@
|
||||
# VK-Photos-Downloader
|
||||

|
||||
## Version 1.0 | 03.08.17
|
||||
A Python script, which allow to download the photos from any album of VK.
|
||||
|
||||
Realized by **Python 3.5**
|
||||
|
||||
## Additional modules:
|
||||
1. **[VK](https://github.com/dimka665/vk)**
|
||||
|
||||
## My profiles:
|
||||
- [VK](https://vk.com/victoria_1807)
|
||||
- [Telegram](https://telegram.me/Victoria1807)
|
||||
- [GitHub](https://github.com/Victoria1807)
|
||||
- E-mail - flamaster1807@gmail.com
|
||||
|
||||
|
BIN
Victoria1807.jpg
BIN
Victoria1807.jpg
Binary file not shown.
Before Width: | Height: | Size: 36 KiB |
@ -1 +1 @@
|
||||
vk==2.0.2
|
||||
vk==3.0
|
||||
|
216
vk-photos-downloader.py
Normal file → Executable file
216
vk-photos-downloader.py
Normal file → Executable file
@ -1,96 +1,120 @@
|
||||
#!/usr/bin/python3.5
|
||||
#-*- coding: UTF-8 -*-
|
||||
|
||||
import vk, os, time
|
||||
from urllib.request import urlretrieve
|
||||
|
||||
token = input("Enter API token (access_token): ") # vk token
|
||||
|
||||
|
||||
#Authorization
|
||||
session = vk.Session(access_token=str(token))
|
||||
vk_api = vk.API(session,v='5.102')
|
||||
|
||||
count = 0 # count of down. photos
|
||||
perc = 0 # percent of down. photos
|
||||
skipped = 0 # unsuccessful down.
|
||||
time_now = time.time() # current time
|
||||
|
||||
url = "'" + input("Enter a URL of an album: ") + "'" # url of album
|
||||
folder_name = input("Enter a folder name for the downloaded photos: ") # fold. for photo
|
||||
print("-------------------------------------------")
|
||||
|
||||
owner_id = url.split('album')[1].split('_')[0] # id of owner
|
||||
album_id = url.split('album')[1].split('_')[1][0:-1] # id of album
|
||||
|
||||
get_album = vk_api.photos.getAlbums(owner_id=owner_id, album_ids=album_id)
|
||||
|
||||
photos_count = get_album['items'][0]['size'] # count of ph. in albums
|
||||
album_title = get_album['items'][0]['title'] # albums title
|
||||
|
||||
collect = True
|
||||
collected = 0
|
||||
|
||||
print("Album title: {}".format(album_title))
|
||||
print("Photos in album: {}".format(photos_count))
|
||||
print("---------------------------")
|
||||
|
||||
links = []
|
||||
|
||||
while collect is True:
|
||||
data = vk_api.photos.get(owner_id=owner_id, album_id=album_id, count=200, offset=collected)['items']
|
||||
collected = (len(data) + collected)
|
||||
print("Collecting data " + str(collected) + "/" + str(photos_count) + " ..")
|
||||
|
||||
for item in data:
|
||||
largest = 0
|
||||
url = ''
|
||||
for i in item['sizes']:
|
||||
if i['width'] > largest:
|
||||
url = i['url']
|
||||
largest = i['width']
|
||||
if url:
|
||||
links.append(url)
|
||||
|
||||
|
||||
if collected >= photos_count or len(data) == 0:
|
||||
collect = False
|
||||
else:
|
||||
time.sleep(1)
|
||||
|
||||
if not os.path.exists(folder_name):
|
||||
os.makedirs(folder_name + '/' + album_title) # creating a folder for download photos
|
||||
|
||||
print("Saving to: " + (folder_name + '/' + album_title))
|
||||
print("---------------------------")
|
||||
|
||||
download_count = 0
|
||||
|
||||
for url in links:
|
||||
download_count += 1
|
||||
try:
|
||||
try:
|
||||
filename = url.split("/")[-1]
|
||||
except:
|
||||
filename = (download_count + ".jpg")
|
||||
|
||||
destination = (folder_name + '/' + album_title + '/' + filename)
|
||||
|
||||
if not os.path.isfile(destination):
|
||||
urlretrieve(url, destination) # download photo
|
||||
else:
|
||||
skipped += 1
|
||||
|
||||
perc = (100 * download_count) / photos_count
|
||||
print("Downloaded {} of {} photos. ({}%)".format(download_count, photos_count, round(perc, 2)))
|
||||
except:
|
||||
print("An error occurred, file skipped.")
|
||||
skipped += 1
|
||||
|
||||
minutes = int((time.time() - time_now) // 60)
|
||||
seconds = int((time.time() - time_now) % 60)
|
||||
|
||||
print("---------------------------")
|
||||
print("Successful downloaded {} photos.".format(count))
|
||||
print("Skipped {} photos.".format(skipped))
|
||||
print("Time spent: {}.{} minutes.".format(minutes, seconds))
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: UTF-8 -*-
|
||||
import argparse
|
||||
import os
|
||||
import time
|
||||
import traceback
|
||||
from pathlib import Path
|
||||
from urllib.request import urlretrieve
|
||||
|
||||
import vk
|
||||
|
||||
|
||||
def main(token: str, album_url: str, folder_name: Path):
|
||||
vk_api = vk.API(access_token=token, v='5.102')
|
||||
|
||||
count = 0 # count of down. photos
|
||||
perc = 0 # percent of down. photos
|
||||
skipped = 0 # unsuccessful down.
|
||||
time_now = time.time() # current time
|
||||
|
||||
url = "'" + album_url + "'" # url of album
|
||||
print("-------------------------------------------")
|
||||
|
||||
owner_id = url.split('album')[1].split('_')[0] # id of owner
|
||||
album_id = url.split('album')[1].split('_')[1][0:-1] # id of album
|
||||
|
||||
get_album = vk_api.photos.getAlbums(owner_id=owner_id, album_ids=album_id)
|
||||
|
||||
photos_count = get_album['items'][0]['size'] # count of ph. in albums
|
||||
album_title = get_album['items'][0]['title'] # albums title
|
||||
|
||||
collect = True
|
||||
collected = 0
|
||||
|
||||
print("Album title: {}".format(album_title))
|
||||
print("Photos in album: {}".format(photos_count))
|
||||
print("---------------------------")
|
||||
|
||||
links = []
|
||||
|
||||
while collect is True:
|
||||
data = vk_api.photos.get(owner_id=owner_id, album_id=album_id, count=200, offset=collected)['items']
|
||||
collected = (len(data) + collected)
|
||||
print("Collecting data " + str(collected) + "/" + str(photos_count) + " ..")
|
||||
|
||||
for item in data:
|
||||
largest = 0
|
||||
url = ''
|
||||
for i in item['sizes']:
|
||||
if i['width'] > largest:
|
||||
url = i['url']
|
||||
largest = i['width']
|
||||
if url:
|
||||
links.append(url)
|
||||
|
||||
if collected >= photos_count or len(data) == 0:
|
||||
collect = False
|
||||
|
||||
else:
|
||||
time.sleep(1)
|
||||
|
||||
target_folder = (folder_name / album_title)
|
||||
target_folder.mkdir(exist_ok=True, parents=True)
|
||||
|
||||
print("Saving to: " + str(target_folder))
|
||||
print("---------------------------")
|
||||
|
||||
download_count = 0
|
||||
|
||||
for url in links:
|
||||
download_count += 1
|
||||
try:
|
||||
try:
|
||||
filename = url.split("/")[-1]
|
||||
|
||||
except Exception:
|
||||
print("Failed to convert filename, falling back to sequential naming")
|
||||
print(traceback.format_exc())
|
||||
|
||||
filename = f'{download_count}.jpg'
|
||||
|
||||
filename = filename.split('?')[0]
|
||||
|
||||
destination = (target_folder / filename)
|
||||
|
||||
if not os.path.isfile(destination):
|
||||
urlretrieve(url, destination) # download photo
|
||||
count += 1
|
||||
else:
|
||||
skipped += 1
|
||||
|
||||
perc = (100 * download_count) / photos_count
|
||||
print("Downloaded {} of {} photos. ({}%)".format(download_count, photos_count, round(perc, 2)))
|
||||
|
||||
except Exception:
|
||||
print("An error occurred, file skipped.")
|
||||
print(traceback.format_exc())
|
||||
skipped += 1
|
||||
|
||||
minutes = int((time.time() - time_now) // 60)
|
||||
seconds = int((time.time() - time_now) % 60)
|
||||
|
||||
print("---------------------------")
|
||||
print("Successful downloaded {} photos.".format(count))
|
||||
print("Skipped {} photos.".format(skipped))
|
||||
print("Time spent: {}.{} minutes.".format(minutes, seconds))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
parser = argparse.ArgumentParser(
|
||||
prog='vk-photos-downloader.py',
|
||||
description='A tool to download photos from albums from vk.com'
|
||||
)
|
||||
parser.add_argument('url', help='Url to target album', type=str)
|
||||
parser.add_argument('-d', '--folder-name', help='Folder to put downloaded photos', type=Path, default=Path('.'))
|
||||
args = parser.parse_args()
|
||||
|
||||
TOKEN: str = os.environ['VK_TOKEN']
|
||||
|
||||
main(token=TOKEN, album_url=args.url, folder_name=args.folder_name)
|
||||
|
Loading…
x
Reference in New Issue
Block a user