Отправка данных от Python до Javascript с использованием EEL - PullRequest
0 голосов
/ 09 марта 2020

Я пытаюсь отправить данные из python в Javascript, используя EEL и их документацию, и это не похоже на работу ... Я продолжаю получать значение NULL на моей странице html / js.

Вот что у меня есть. В основном я хочу получить ссылку на обои BING и использовать ее на своей странице в качестве фона. Но до тех пор я хочу сначала получить результат.

Сценарий BING py:

import bs4
import requests
import json


def scrape_bing():
   BASE_PATH = 'http://www.bing.com'
   BASE_REST = '/HPImageArchive.aspx?format=js&idx=0&n=1&mkt=en-US'
   URL = BASE_PATH + BASE_REST

   r = requests.get(url=URL)

   if r.status_code == 200:
      data = r.json()
      wallpaper_path = BASE_PATH + data['images'][0]['url']
      print(wallpaper_path)
   else:
      raise ValueError("[ERROR] non-200 response from Bing server for '{}'".format(URL))

   def main():
      scrape_bing()

   if __name__ == '__main__':
      main()

Сценарий работает и возвращает мой URL в консоли Python.

Мой main.py с EEL выглядит следующим образом:

import eel
from inc.bing import scrape_bing

eel.init('web')

myDef = scrape_bing()

@eel.expose
def bingR():
   return myDef

try:
   eel.start('index.html', mode='chrome', host='localhost', port=8274)

except (SystemExit, MemoryError, KeyboardInterrupt):
   pass

print ('Closed browser log...!')

Я использовал команду asyn c, как и в их примерах, например:

    <script type="text/javascript" src="/eel.js"></script>
    <script type="text/javascript">

    async function run() {
        let n = await eel.bingR()();
        console.log('Got this from Python: ' + n);
    }

    run();

    </script>

Пожалуйста помогите мне понять, как все это работает.

1 Ответ

2 голосов
/ 09 марта 2020

Не уверен, что вы случайно отформатировали свой код неправильно, но это немного не так. Также вы импортировали bs4 и json, когда вам это не нужно.

Ваша функция scrape_bing () ничего не возвращала. Он должен возвращать значение « myDef » при назначении его в « myDef = scrape_bing () ».

Я немного изменил ваше значение и придумал этот пример, который, надеюсь, поможет вам начать. Надеюсь, это поможет.


main.py

import eel
import requests

eel.init('web')

@eel.expose
def bingR():
    BASE_PATH = 'http://www.bing.com'
    BASE_REST = '/HPImageArchive.aspx?format=js&idx=0&n=1&mkt=en-US'
    URL = BASE_PATH + BASE_REST
    r = requests.get(url=URL)
    if r.status_code == 200:
        data = r.json()
        wallpaper_path = BASE_PATH + data['images'][0]['url']
        print(wallpaper_path)
        return wallpaper_path
    return 'No wallpaper found'

try:
    eel.start('index.html', mode='chrome', host='localhost', port=8274)
except (SystemExit, MemoryError, KeyboardInterrupt):
    pass

print ('Closed browser log...!')

web \ myscript. js

async function run() {
    let n = await eel.bingR()();
    console.log('Got this from Python: ' + n);
    document.getElementById('output').value = n;
}
run();

web \ index. html

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>Test</title>
</head>
<body>
  <script type="text/javascript" src="/eel.js"></script>
  <script type="text/javascript" src="/myscript.js"></script>
  <input id="output" value="Output here" style="width: 700px;">
</body>
</html>

Также спасибо за то, что познакомили меня с угрем. Впервые пользуюсь им и очень нравится :) 1027 *

...