1

J'ai une liste de ~ 3000 URLs que j'essaie de créer des liens raccourcis Google, l'idée est que ce fichier CSV a une liste de liens et que je veux que mon code sorte les liens raccourcis dans la colonne à côté des URL d'origine.Créer des URL raccourcis Google, mettre à jour mon fichier CSV

J'ai essayé de modifier le code trouvé sur ce site here mais je ne suis pas assez qualifié pour le faire fonctionner.

Voici mon code (je posterais pas normalement une clé API, mais la personne originale qui a demandé à ce déjà affiché publiquement sur ce site):

import json 
import pandas as pd 

df = pd.read_csv('Links_Test.csv') 
def shorternUrl(my_URL): 
    API_KEY = "AIzaSyCvhcU63u5OTnUsdYaCFtDkcutNm6lIEpw" 
    apiUrl = 'https://www.googleapis.com/urlshortener/v1/url' 
    longUrl = my_URL 
    headers = {"Content-type": "application/json"} 
    data = {"longUrl": longUrl} 
    h = httplib2.Http('.cache') 
    headers, response = h.request(apiUrl, "POST", json.dumps(data), headers) 
    return response 


for url in df['URL']: 
    x = shorternUrl(url) 
    # Then I want it to write x into the column next to the original URL 

mais je reçois seulement des erreurs à ce moment, avant même commencé à comprendre comment écrire les nouvelles URL au fichier CSV.

Voici quelques exemples de données:

URL 
www.apple.com 
www.google.com 
www.microsoft.com 
www.linux.org 

Merci pour votre aide,

Me

+0

Je crois que, au moment de votre fonction shorternUrl ne fonctionne pas du tout? c'est-à-dire, même si vous essayez juste shorternUrl ('www.google.com') vous obtenez une erreur? On dirait un problème très similaire à: https://stackoverflow.com/questions/11278049/google-url-shortener-api-with-python-returning-error cela aide-t-il? –

+0

@JohnFaben, oui, c'est la question que je lie à ma question. J'essaie de travailler à partir de cette question d'exemple pour créer du code qui fonctionne pour moi. Oui, vous avez également raison que ma fonction ne fonctionne pas du tout. Merci pour votre commentaire. – SDS

Répondre

2

Je pense que la question est que vous didnot inclure la clé API dans la demande. En passant, le package certifi vous permet de sécuriser une connexion à un lien. Vous pouvez l'obtenir en utilisant pip install certifi ou pip urllib3[secure].

Ici, je crée ma propre clé API, vous pouvez donc la remplacer par la vôtre.

from urllib3 import PoolManager 
import json 
import certifi 

sampleURL = 'http://www.apple.com' 

APIkey = 'AIzaSyD8F41CL3nJBpEf0avqdQELKO2n962VXpA' 
APIurl = 'https://www.googleapis.com/urlshortener/v1/url?key=' + APIkey 
http = PoolManager(cert_reqs = 'CERT_REQUIRED', ca_certs=certifi.where()) 

def shortenURL(url): 
    data = {'key': APIkey, 'longUrl' : url} 
    response = http.request("POST", APIurl, body=json.dumps(data), headers= {'Content-Type' : 'application/json'}).data.decode('utf-8') 
    r = json.loads(response) 
    return (r['id']) 

La partie de décodage convertit l'objet de réponse dans une chaîne afin que nous puissions le convertir en un JSON et récupérer des données.

Ensuite, vous pouvez stocker les données dans une autre colonne et ainsi de suite.

Pour l'exempleUrl, j'ai récupéré https (goo.gl/nujb) à partir de la fonction.

+0

Je n'arrive pas à faire marcher ça. Quand j'essaye shortenURL (sampleURL) j'obtiens un long message d'erreur qui finit avec ceci "TypeError: urlopen a eu plusieurs valeurs pour l'argument de mot-clé" corps "" - des idées que je fais mal? J'ai importé toutes les bibliothèques comme vous l'avez demandé ... merci! – SDS

+0

Je pense avoir trouvé le problème. Dans Conda, que j'utilise, tout ce qui est inférieur à urllib3 1.10 donnera l'erreur que je reçois. Mon Cona ne me laisse pas me mettre à niveau vers 1.10 où ces erreurs/bugs sont résolus. – SDS

+0

Ma version urlib3 utilisable avec le code est 1.14.1. Cela est arrivé par défaut avec mon installation de PyCharm je suppose que lorsque j'utilise le 'conda update urllib3' il répond qu'aucun paquet n'a été trouvé. Dans ce cas, vous pouvez utiliser la commande 'conda install urllib3' à la place. –

1

J'ai trouvé une solution ici:

https://pypi.python.org/pypi/pyshorteners

Exemple copié de la page liée:

from pyshorteners import Shortener 

url = 'http://www.google.com' 
api_key = 'YOUR_API_KEY' 
shortener = Shortener('Google', api_key=api_key) 
print "My short url is {}".format(shortener.short(url))