Python - Как отправить значения между функциями один раз - PullRequest
0 голосов
/ 11 декабря 2018

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

def get_info(thread):


    url = thread #Whatever site such as Google.com

    headers = {
        'Connection': 'keep-alive',
        'Upgrade-Insecure-Requests': '1',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36',
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
        'Accept-Encoding': 'gzip, deflate, br',
        'Pragma': 'no-cache',
        'Cache-Control': 'max-age=0',
    }

    r = requests.get(url, headers=headers, timeout=12)

    bs4 = soup(r.text, "html.parser") #We scrape here


    try:
        search = bs4.find('h1').text
    except:
        search = None

    try:
        image = bs4.find('image')
    except:
        image = None

    #I want to use the search and image on the function below

    --------------------------------------------------------- #Here is where I want to cut

def get_json(): 

    url = thread + '.json' #We just add json at the end to get the website that supports json

    headers = {
        'Connection': 'keep-alive',
        'Upgrade-Insecure-Requests': '1',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36',
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
        'Accept-Encoding': 'gzip, deflate, br',
        'Pragma': 'no-cache',
        'Cache-Control': 'max-age=0',
    }

    r = requests.get(url, headers=headers, timeout=12)

    json_resp = r.json()

    for i in json_resp:
       if search in i['search']: #I use the 'search = bs4.find('h1').text' to match and only want to print if it matches
           print(i)

    try:
        final_name = i['name']
    except:
        final_name = None

    try:
        final_img = i['image']
    except:
        final_img = None

    metadata = {
        'name': final_name,
        'image': final_img

    }
return metadata #return the value

Есть две функции get_info и get_json - что я хочу сделать, это когда я запускаю код:

while True:
    testing = get_json(thread)
    print(testing)
    time.sleep(5)

вывод должен быть return of get_json - Однако проблема, с которой я сталкиваюсь, заключается в том, что я хочу вызвать только get_json(thread), но чтобы иметь возможность получить возврат get_json(thread) Мне нужно получить значение поиск из get_info(thread) только ОДНАЖДЫ (постоянно один и тот же) , чтобы иметь возможность продолжить работу get_json (нить)

У меня вопрос: как я могу звонить get_json(thread) без необходимости звонить get_info(thread) каждый раз, когда я звоню get_json(thread) (чтобы получить искать значение из get_info(thread) только один раз и использовать его каждый разЯ звоню get_json)

1 Ответ

0 голосов
/ 11 декабря 2018

Если get_info() возвращаемое значение не изменяется, вы можете вызвать его один раз перед вводом цикла while и передать возвращаемое значение get_info() в качестве параметра get_json() вместе с thread

...