Как получить ссылку, на которую я перенаправлен - PullRequest
0 голосов
/ 09 мая 2018

У меня есть программа с файлом конфигурации в моей программе, в которую вы можете добавить символы акций компании, затем она берет те символы акций, которые находятся в этом файле конфигурации, и ищет новостные статьи, которые представляют собой всю информацию, получаемую из API. Одной из категорий, которые я печатаю, является поле URL, поэтому распечатываемый URL - это URL, который перенаправляет вас на другой URL (реальный URL). Теперь я пытаюсь получить URL-адрес, который я перенаправляю на печать

У меня есть глобальный список компаний, в который я добавляю все URL-адреса, к которым я обращаюсь, чтобы все общие URL-адреса перенаправления были там. Я получаю перенаправленный URL, единственная проблема в том, что я получаю только 1 перенаправленный URL, и он, в свою очередь, печатает этот URL для каждой новостной статьи, которую я печатаю. Это немного сложно объяснить, поэтому, если вам нужны дополнительные разъяснения, просто спросите.

Вот мой код, и я прокомментировал то, что пытался.

Для тестирования здесь есть 2 стандартных символа, которые вы можете добавить в файл конфигурации. Если вы хотите что-то протестировать: aapl и yelp, просто поместите их в отдельные строки в файле конфигурации.

import sys
import json
import urllib.request
import time
import datetime
import requests

def main():
    openconfigfile()
    searchfornews()

def openconfigfile():
    mylist = []
    with open('config.txt') as myfile:
        for company in myfile:
            mylist.append(company.strip())
    return mylist

companyurl = []
def searchfornews():
    myurl = []
    global companyurl
    url = 'https://api.iextrading.com/1.0/stock/'
    companies = openconfigfile()
    for company in companies:
        stockinput = company + '/news/last/2'
        createdurl = url + stockinput
        myurl.append(createdurl)
    while True:
        try:
            for url in myurl:
                fob = urllib.request.urlopen(url)
                data = fob.read().decode('utf-8')
                companydata = json.loads(data)
                for company in companydata:
                    company['datetime'] = reformatdate()
                    companyurl.append(company['url'])
                    # r = getredirectedlink()
                    # company['url'] = r.url

                    print('''======== [%s] ========
%s:   "%s"
%s
tags: %s''' % (company['datetime'], company['source'], company['headline'], company['url'], company['related']))

            time.sleep(30)
        except Exception as e:
            print()
            print('''ERROR: news not found for 1 or more stock symbols
You have a stock symbol in the config file that doesnt match any known stock symbol''', e)
            time.sleep(30)

def reformatdate():
    time = datetime.datetime.today()
    newtime = time.strftime('%B %d %Y, %I:%M %p')
    return newtime

# def getredirectedlink():
#     global companyurl
#     for x in companyurl:
#         r = requests.get(x)
#         return r

if __name__ == '__main__':
    sys.exit(main())

1 Ответ

0 голосов
/ 09 мая 2018

Вы почти закончили. Вам просто нужно изменить две вещи:

  1. внутри searchfornews:

    company['datetime'] = reformatdate()
    companyurl.append(company['url'])
    # r = getredirectedlink()
    # company['url'] = r.url
    

    изменить на

    company['datetime'] = reformatdate()
    company['url'] = getredirectedlink(company['url'])
    companyurl.append(company['url'])
    

    И изменить getredirectedlink на следующее:

    def getredirectedlink(companyurl):
        r = requests.get(companyurl)
        return r.url
    
...