LINUX.ORG.RU
решено ФорумAdmin

Стянуть свои шортлинки на добрую память.

 , , , ,


1

3

Суть вопроса такова, несколько лет подряд использовал сервис https://goo.gl вместо закладок.

Сейчас там есть несколько сот полезных для меня линков.

CSV файл, предлагаем Гулом содержит всего чуть больше 30 ссылок вместо 200.

Хочется стянуть их автоматически. Почитал доку по Google API вроде все понятно. Посмотрел на GitHub примеры — снова запутался.

Распишите на чем лучше писать скрипт, чтобы получилось максимально логично и читабельно.

Пример работы API https://developers.google.com/url-shortener/v1/url/list#auth

Есть даже вот такой образец получения токена доступа.

В общем пишите, а я пошел отсыпаться :-)

★★★★★

Что лучше знаешь, на том и пиши. У тебя по сути обычное RESTApi, кинул запрос - получил json, разобрал, сохранил.

Я бы взял python+requests.

hippi90 ★★★★★
()
Ответ на: комментарий от MrClon

Не знаю. Так получилось)

Бывает так, что что-то идет не по плану.

Тогда мне казалось это удобным, году в 2012, залогинился в Гугл и пожалуйста все на месте.

Twissel ★★★★★
() автор топика
Ответ на: комментарий от Twissel
import json

из стандартной библиотеки.

Ip0 ★★★★
()
Ответ на: комментарий от MrClon

И да, в те времена у меня в браузерных закладках творился адский АдЪ.

Тогда, действительно, в коротких ссылках были только избранные закладки.

Twissel ★★★★★
() автор топика
Ответ на: комментарий от hippi90

Да уже ответили.

Отлично, спасибо.

Twissel ★★★★★
() автор топика
Ответ на: комментарий от bvn13

Звучит по-идиотски, но просто: актуальная информация всегда наверху.

А та, которой сроку больше N-дней, автоматически уходит вниз. Когда-то думал, что Гугл добавит сортировку по количеству переходов в общем списке — это был бы вес ссылки. Но то была сугубо моя хотелка.

Сейчас же они вообще собрались его закапывать для простых юзеров, наверное, за ненадобностью.

Twissel ★★★★★
() автор топика
Ответ на: комментарий от hippi90

Посмотри в удаленных, чисто из любви к искусству, как можно быстро улучшить получившийся говнокод.

На Питоне последний раз парсил HTML через BeautifulSoup, тут же, на ЛОРе.

Так что, все закономерно печально, но быстро :-)

Twissel ★★★★★
() автор топика
Ответ на: комментарий от hippi90

Еще немного аккуратного говнокода


#!/usr/bin/python3

import urllib.parse
import requests

def parse_next():
    lines = [line.rstrip('\n') for line in open('tokens.txt')]
    with open('data.json', 'a') as f:
       for  i,val in enumerate(lines):
           lines[i] = urllib.parse.quote_plus(val)
           api_url = test_url + '&start-token=' + lines[i]
           r = requests.get(api_url)
           f.write(r.text)

test_url = 'https://www.googleapis.com/urlshortener/v1/url/history?access_token=ya29...'
fn = open('data.json','w')
fapi_url = test_url
r = requests.get(fapi_url)
fn.write(r.text)
fn.close()

parse_next()
Twissel ★★★★★
() автор топика
Ответ на: Еще немного аккуратного говнокода от Twissel
#!/usr/bin/python3

import urllib.parse
import requests
import time

def main():
   def parse_next():
       lines = [line.rstrip('\n') for line in open('tokens.txt')]
       with open('data.json', 'a') as f:
          for  i,val in enumerate(lines):
              lines[i] = urllib.parse.quote_plus(val)
              api_url = test_url + '&start-token=' + lines[i]
              r = requests.get(api_url)
              f.write(r.text)

   test_url = 'https://www.googleapis.com/urlshortener/v1/url/history?access_token=ya29...'
   fn = open('data.json','w')
   fapi_url = test_url
   r = requests.get(fapi_url)
   fn.write(r.text)
   fn.close()
   parse_next()

start_time = time.time()

main()

print("--- %s seconds ---" % (time.time() - start_time))

Twissel ★★★★★
() автор топика
Ответ на: комментарий от hippi90

окончательный вариант

#!/usr/bin/python3

import urllib.parse
import requests
import time

def main():
   def get_gapi_token(url):
       r = requests.post(url, data = {'client_id':'mygapiClientID', 'client_secret':'mygapiClientSecret',
'refresh_token':'mygapiRefreshToken', 
'grant_type':'refresh_token'})
       gapi_token = r.json()
       return gapi_token['access_token']
       
   def parse_next():
       lines = [line.rstrip('\n') for line in open('tokens.txt')]
       with open('data.json', 'a') as f:
          for  i,val in enumerate(lines):
              lines[i] = urllib.parse.quote_plus(val)
              api_url = test_url + '&start-token=' + lines[i]
              r = requests.get(api_url)
              f.write(r.text)
   

   gapi_url = 'https://accounts.google.com/o/oauth2/token'

   test_url = 'https://www.googleapis.com/urlshortener/v1/url/history?access_token='+get_gapi_token(gapi_url)
   fn = open('data.json','w')
   fapi_url = test_url
   r = requests.get(fapi_url)
   fn.write(r.text)
   fn.close()
   parse_next()

start_time = time.time()

main()

print("--- %s seconds ---" % (time.time() - start_time))

Twissel ★★★★★
() автор топика
Последнее исправление: Twissel (всего исправлений: 1)
Ответ на: комментарий от hippi90

Кстати, а как можно обойтись без рекурсивного вызова, если брать nextPageToken не из файла, а из JSON'а ?

Twissel ★★★★★
() автор топика
Ответ на: комментарий от hippi90

Вот чего я хотел

#!/usr/bin/python3

import codecs
import json
import urllib.parse
import requests
import time


def main():
    
   def get_json_field(turl, num):
       tokens_list = [''] * num
       f = urllib.request.urlopen(turl)
       reader = codecs.getreader("utf-8")
       values = json.load(reader(f))
       url_encoded = urllib.parse.quote_plus(values['nextPageToken'])
       tokens_list[0] = url_encoded
       for i in range (1,num):
               g = urllib.request.urlopen(turl+'&start-token='+tokens_list[i-1])
               reader = codecs.getreader("utf-8")
               local_values = json.load(reader(g))
               url_encoded = urllib.parse.quote_plus(local_values['nextPageToken'])
               tokens_list[i] = url_encoded        
       return tokens_list
       
   def get_gapi_token(url):
       r = requests.post(url, data = {'client_id':'mygapiClientID', 
       'client_secret':'mygapiSecret',
       'refresh_token':'mygapiRefreshToken', 
       'grant_type':'refresh_token'})
       gapi_token = r.json()
       return gapi_token['access_token']
       
   def parse_next(n):
       lines = [''] * n
       lines = get_json_field(test_url,n)       
       with open('data.json', 'a') as f:
          for  i,val in enumerate(lines):
              api_url = test_url + '&start-token=' + lines[i]
              r = requests.get(api_url)
              f.write(r.text)
   

   gapi_url = 'https://accounts.google.com/o/oauth2/token'

   test_url = 'https://www.googleapis.com/urlshortener/v1/url/history?access_token='+get_gapi_token(gapi_url)
   fn = open('data.json','w')
   fapi_url = test_url
   r = requests.get(fapi_url)
   fn.write(r.text)
   fn.close()
   parse_next(7)

start_time = time.time()

main()

print("--- %s seconds ---" % (time.time() - start_time))
Twissel ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.