scraping mapillary sequences user script

This commit is contained in:
Tykayn 2024-03-26 14:57:54 +01:00 committed by tykayn
parent 233e483804
commit 2b4b809bf1
4 changed files with 152 additions and 0 deletions

View File

@ -0,0 +1,38 @@
import requests, json
import argparse
from urllib.parse import quote
def parse_args(argv =None):
parser = argparse.ArgumentParser()
parser.add_argument('--access_token', type=str, help='Your mapillary access token')
parser.add_argument('--username', type=str, help='Username to get the sequences id of')
parser.add_argument('--pictures', type=str, help='Limit of pictures to fetch')
global args
args = parser.parse_args(argv)
if __name__ == '__main__':
parse_args()
if args.access_token == None:
print('please provide the access_token')
exit()
mly_key = args.access_token
creator_username = args.username
max_img= args.pictures
url = f'https://graph.mapillary.com/images?access_token={mly_key}&creator_username={creator_username}&limit={max_img}&fields=id,sequence'
response = requests.get(url)
if response.status_code == 200:
json = response.json()
# tri des séquences uniques
sequences_ids = [obj['sequence'] for obj in json['data']]
unique_ids = list(set(sequences_ids))
print(unique_ids)
else:
print(response)

View File

@ -0,0 +1,66 @@
// script à lancer dans le navigateur pour récupérer toutes les séquences d'un compte
// pour que cela fonctionne il faut aller sur la page d'un utilisateur, https://www.mapillary.com/app/user/tykayn
// puis scroller pour voir toutes les séquences
// et lancer ce script dans la console js pour avoir à la fin un tableau de toutes les séquences.
// ouvrir le drawer de séquene key
function toggle_advanced_info () {
let _dots = document.querySelector('.three-dots')
_dots.click
}
sequences_list = []
function filter_sequences_id () {
filteredArray = sequences_list.filter(function (item, pos) {
return sequences_list.indexOf(item) == pos
})
console.log('sequences_list', filteredArray)
}
function click_block_number (num) {
console.log('click block num', num)
let sequence_block = document.querySelector('drawer-sequence-item.ng-star-inserted:nth-child(' + num + ') > a:nth-child(1) > div:nth-child(1) > div:nth-child(1) > i:nth-child(2)')
if (sequence_block) {
sequence_block.click()
} else {
console.info('pas de block')
}
}
function add_sequence_id () {
let id_sequence_container = document.querySelector('.content > div:nth-child(1) > div:nth-child(2) > app-copy-field:nth-child(2) > div:nth-child(1) > div:nth-child(1)')
id = id_sequence_container.innerText
sequences_list.push(id)
}
function iterate_blocks (initial_block = 4, max_block = 6, waiting = 300) {
// compter les blocs
let listing_blocs = document.querySelectorAll('drawer-sequence-item')
console.log('listing_blocs', listing_blocs.length)
// sequences_list = []
let ii = 1 * initial_block
let jj = 1 * initial_block
listing_blocs.forEach((elem) => {
if (ii <= max_block) {
setTimeout(() => {
jj++
click_block_number(jj)
add_sequence_id()
}, ii * waiting)
ii++
}
})
filter_sequences_id()
}
// toggle_advanced_info()
// le premier bloc qui permet de cliquer sur une séquence est le 5e à partir de zéro
// on définit un max d'itérations à 20 pour tester, et 300 milisecondes entre chaque
iterate_blocks(20, 25, 300)

View File

@ -0,0 +1,14 @@
# export de séquences mapillary
script à lancer dans le navigateur pour récupérer toutes les séquences d'un compte
pour que cela fonctionne il faut aller sur la page d'un utilisateur, https://www.mapillary.com/app/user/tykayn
puis scroller pour voir toutes les séquences
et lancer ce script dans la console js en le copiant collant pour avoir à la fin un tableau de toutes les séquences.
Pour que ça fonctionne bien il faut que le popup d'info soit ouvert.
Vous pouvez le recopier avec un clic dans la console de votre navigateur.
J'utilise ensuite un script qui lit un fichier texte contenant un tableau python listant des strings d'identifiants de séquences pour générer un script bash qui lance une commande par séquence pour télécharger toutes les images de la séquence en renommant les fichiers et en ajoutant les infos exif: le mapillary_download de stefmani pour lancer le téléchargement de chaque séquence à la suite.
https://github.com/Stefal/mapillary_download

View File

@ -0,0 +1,34 @@
import argparse
def parse_args(argv =None):
parser = argparse.ArgumentParser()
# parser.add_argument('--access_token', type=str, help='Your mapillary access token')
parser.add_argument('--username', type=str, help='Username to get the sequences id of')
global args
args = parser.parse_args(argv)
if __name__ == '__main__':
parse_args()
username=args.username
input_file = f"sequences_{username}.txt"
output_file = f"script_bash_get_sequences_for_user_{username}.sh"
access_token = "--access_token=\"mly_token_A_REMPLACERRRRRRRRRRRR\" "
format_string = "python download.py {} --sequence_id={}\n"
with open(output_file, "w") as output:
with open(input_file, "r") as input_handle:
content = input_handle.read()
sequences = eval(content)
for seq in sequences:
full_cmd = f"python download.py {access_token} --sequence_id={seq} --username={username}\n"
output.write(full_cmd)
print(f"Script Bash généré : {output_file}")
print(output_file)