Dies ist Qiitas erster Beitrag. Dieses Mal möchte ich ein Memorandum darüber aufbewahren, wie man "Python auf PHP auf Heroku ausführt", über das ich ungefähr 3 Stunden lang an einem schlechten Ort gestolpert bin. Ich schreibe mit Hirntod. Es wäre großartig, wenn Sie die Tippfehler mit einem warmen Auge sehen könnten.
Zuerst habe ich mich gefragt, ob ich Scraping-Informationen auf der Webseite veröffentlichen könnte. Aber Scraping ist einfach, wenn Sie es in Python schreiben! Es war der Eingang zum Höllentor, der begann.
Ich dachte, es wäre gut, vorerst die besten Nachrichten zu erhalten, also schrieb ich den folgenden Code.
# coding: utf-8
import requests
from bs4 import BeautifulSoup
#Holen Sie sich die Seiten-ID der aktuellen Top-News
toppage_url = "https://news.yahoo.co.jp/"
html = requests.get(toppage_url)
soup = BeautifulSoup(html.content, "html.parser")
topic_element = soup.select_one("li.topicsListItem")
news_link = topic_element.find("a").get("href")
news_id = int(str(news_link).replace("https://news.yahoo.co.jp/pickup/",""))
#Erhalten Sie Informationen zu Neuigkeiten
news_url = f"https://news.yahoo.co.jp/pickup/{news_id}"
html = requests.get(news_url)
soup = BeautifulSoup(html.content, "html.parser")
news_element = soup.select_one("p.pickupMain_articleSummary")
print(news_element.text)
Sie können Befehlszeilenbefehle mit exec ausführen und die Ausgabe in Variablen einfügen. Schreiben Sie PHP wie folgt.
<?php header("Content-type: text/html; charset=utf-8"); ?>
<!doctype html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>Python-PHP</title>
</head>
<body>
<?php
exec("export LANG=ja_JP.UTF-8");
exec('python news.py', $output);
echo '<p>',$output[0],'</p>';
return false;
?>
</body>
</html>
Das Wichtigste ist der Teil ** exec ("export LANG = ja_JP.UTF-8"); **.
UTF-8, das es schon eine Weile gibt. Dies ist die erste der schwierigen Schlachten. PHP sagt grundsätzlich, dass der Zeichencode in ** UTF-8 ** geschrieben werden sollte. Die Python-Ausgabe musste auch mit utf-8 vereinheitlicht werden, das dort am Anfang feststeckte. (Die Python-Seite war Shift-JIS)
Es ist fertig! Bereitstellen und sehen, was passiert! Wenn ich die URL bereitstelle und öffne ...
\\ Derzeit kann Heroku die Anfrage nicht verarbeiten //
Ja. Hier ist der Fehler. Der Einsatz war erfolgreich, aber ich war in einem Nande-Zustand. Unter dem Strich benötigen Sie zwei BuildPacks, wenn Sie gleichzeitig PHP und Python auf Heroku ausführen möchten. Lassen Sie es uns so einstellen. Dieses Mal sind ** Webseiten die Haupt **, daher lautet die Reihenfolge PHP-> Python.
Das sollte in Ordnung sein! Hier und da! Und wenn ich versuche, bereitzustellen
\\ Deploy failed //
Hmmm das. Als ich dieses Mal das Protokoll abfing, fand ich den folgenden Inhalt.
-----> App not compatible with buildpack: https://buildpack-registry.s3.amazonaws.com/buildpacks/heroku/python.tgz
More info: https://devcenter.heroku.com/articles/buildpacks#detection-failure
! Push failed
Eine Suche danach zeigt, dass die für die Python-Anwendung benötigten Dateien fehlen. Lass es uns schaffen. Folgendes benötigen Sie für diesen Python-Code:
#requirement.txt
beautifulsoup4==4.9.1
requests==2.24.0
#runtime.txt
python-3.7.7
Die Bereitstellung damit hat gut funktioniert.
Ich verbrachte einen Tag damit, mit Zeichencodes zu kämpfen und eine Umgebung für Heroku zu schaffen. Ich hasse Japanisch. Als ich mit XAMPP eine Testumgebung erstellte, machte ich mir übrigens mehr Sorgen um den Zeichencode als um Heroku. Diesmal bin ich glücklich, weil das Display vorerst erfolgreich war.
Sites informiert, dass BuildPack erforderlich ist https://stackoverflow.com/questions/12126439/run-python-and-php-in-a-single-heroku-app-procfile
Eine Site, die die Dateien kennt, die zur Vorbereitung der Ausführungsumgebung von Python auf Heroku erforderlich sind https://teratail.com/questions/258801
(Eine Seite, die geholfen hat, mit geheimen Fehlern umzugehen) Nach dem Bereitstellungscode = H14 desc = "Keine Webprozesse ausgeführt" https://qiita.com/rebi/items/efd1c36f0a9e46222d80
Recommended Posts