Tengo un script php que ejecuta un script de python y obtuve un objeto como este:
{'data': [{'article title', 'article description', 'timestamp', 'weburl'}], 'status': 200, 'answers': [1]} Como sé, tengo que transformar esto en un javascript JSON de javascript object de javascript.
Y lo intenté como
myjs = JSON.parse(JSON.stringify(answer))y
JSON.stringify(answer) o incluso simplemente concatenar con " al principio y al final. Pero tampoco obtuve un buen resultado. Entonces, ¿cuál es la forma correcta? ¿O debería cambiar algo en el lado de php?
La parte php es simplemente esto:
if ($_GET['times'] == 0) { $command = escapeshellcmd('python3 feed.py '. $_GET['subject']); $output = json_encode(shell_exec($command)); header('Content-type: application/json'); echo $output; } Esto está en mi script de python :
#!/usr/bin/python import requests import json import html import sys requestpost = requests.post('NewsSource') response_data = requestpost.json() data = [] status = 0 answers = 0 out = {"data":[], "status":[], "answers":[0]} searchterm = sys.argv[1] error = 0 if requestpost.status_code == 200: out["status"] = 200 for news in response_data["news"]: try: currentNews = json.loads(news) if ((html.unescape(currentNews["title"]) != "Array" and html.unescape(currentNews["title"]).lower().find(searchterm.lower()) != -1) or (html.unescape(currentNews["description"]).lower().find(searchterm.lower()) != -1)): outnews = {html.unescape(currentNews["timestamp"]), html.unescape(currentNews["title"]), html.unescape(currentNews["description"]), html.unescape(currentNews["link"])} out["data"].append(outnews) out["answers"][0] = out["answers"][0] +1 except: error += 1 else: out["status"] = 404 print (out)Cambie el script de Python para que imprima JSON en lugar del formato de Python.
print(json.dumps(out)) Sin embargo, los conjuntos no están en JSON, así que cambia outnews a una lista.
outnews = [html.unescape(currentNews["timestamp"]), html.unescape(currentNews["title"]), html.unescape(currentNews["description"]), html.unescape(currentNews["link"])]Luego, el script PHP simplemente puede devolver eso al cliente.
if ($_GET['times'] == 0) { $command = escapeshellcmd('python3 feed.py '. $_GET['subject']); header('Content-type: application/json'); passthru($command); } Si passthru() no funciona, puede probar con su shell_exec() original. No necesita llamar a json_encode() porque ya está codificado.
if ($_GET['times'] == 0) { $command = escapeshellcmd('python3 feed.py '. $_GET['subject']); $output = shell_exec($command); header('Content-type: application/json'); echo $output; }Además, si quiero recuperar todas las noticias que cambiar out devolverlas de esta manera:
out = [] error = 0 status = 0 nrOfResults = 0 if requestpost.status_code == 200: status = 200 for news in response_data["news"]: try: currentNews = json.loads(news) if ((html.unescape(currentNews["title"]) != "Array" and html.unescape(currentNews["title"]).lower().find(searchterm.lower()) != -1) or (html.unescape(currentNews["description"]).lower().find(searchterm.lower()) != -1)): outnews = [html.unescape(currentNews["timestamp"]), html.unescape(currentNews["title"]), html.unescape(currentNews["description"]), html.unescape(currentNews["link"])] out.append(outnews) nrOfResults = nrOfResults +1 except: error += 1 else: status = 404 out.append(status) out.append(nrOfResults) #outnews = [html.unescape(currentNews["timestamp"]), html.unescape(currentNews["title"]), html.unescape(currentNews["description"]), html.unescape(currentNews["link"])] print(json.dumps(out)) que el último elemento de la matriz js será el número de resultados y el anterior será el estado del enlace de origen.