Eine Geschichte über das Ausführen von Python auf PHP auf Heroku

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.

Gedanken

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.

Scraping mit Python

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)

Holen Sie sich die Python-Ausgabe mit exec () in PHP

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"); **.

Geschichte des Zeichencodes

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)

Bereitstellen bei Heroku! Sollte ein Fehlersturm sein

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. e4d1a639c4938b5f126d5891784286ff.png 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.

Eindrücke vom Abschluss des Rennens

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.

Referenzmaterial

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

Eine Geschichte über das Ausführen von Python auf PHP auf Heroku
Ein Memo, das ein Tutorial zum Ausführen von Python auf Heroku erstellt hat
Eine Geschichte über Python Pop und Append
Die Geschichte, Artikel-verknüpfte Anzeigen auf Jubatus anzeigen zu wollen
Ein Memorandum zum Berühren von Python Flask mit Heroku
Eine Geschichte über das Ändern von Python und das Hinzufügen von Funktionen
Eine Geschichte über das Ausprobieren eines (Golang +) Python-Monorepo mit Bazel
Eine Geschichte über einen Linux-Anfänger, der Linux auf ein Windows-Tablet bringt
Über Perl, Python, PHP, Ruby
Memorandum über Korrelation [Python]
Ein Memorandum über den Python-Mock
Ein Hinweis zu [Python] __debug__
Ich dachte an einen Anfängerkurs über Python, der auf Blockchain-Spielen basiert
Ein Memorandum, in dem ich über mein persönliches HEROKU & Python (Flask) gestolpert bin
Eine Geschichte darüber, wie man einen relativen Pfad in Python angibt.
Eine Geschichte über einen Amateur, der mit Python (Kivy) einen Blockbruch macht ②
[GCP] Ein Memorandum zum Ausführen eines Python-Programms mit Cloud-Funktionen
Eine Geschichte über einen Amateur, der mit Python (Kivy) einen Blockbruch macht ①
Eine Geschichte über den Versuch, private Variablen in Python zu implementieren.
Eine Geschichte über einen GCP-Anfänger, der versucht, mit GCE einen Micra-Server aufzubauen
Eine Geschichte über einen Python-Anfänger, der mit dem No-Modul'http.server 'feststeckt.
Erstellen einer Python-Umgebung auf einem Mac
Erstellen einer Python-Umgebung unter Ubuntu
Python: Ein Hinweis zu Klasse 1 "Abstract"
Erstellen Sie eine Python-Umgebung auf dem Mac (2017/4)
Python + Django + Scikit-Learn + Mecab (1) mit Heroku
Python + Django + Scikit-Learn + Mecab (2) mit Heroku
Erstellen Sie eine Python-Umgebung in Centos
Problem mit Python json.loads (), das str in Heroku zurückgibt
Die Geschichte der Verwendung von Python reduziert
Erstellen Sie eine Python3-Umgebung unter CentOS7
Ein Hinweis zu Mock (Python-Mock-Bibliothek)
Führen Sie Python regelmäßig auf Heroku Scheduler aus
Eine Geschichte über das Hinzufügen einer REST-API zu einem mit Python erstellten Daemon
Einfach! Implementieren Sie einen Twitter-Bot, der auf Heroku in Python ausgeführt wird
Die Geschichte, Chrome OS (nicht Chromium) in Surface GO zu integrieren
Eine Geschichte über die Entwicklung eines weichen Typs mit Firestore + Python + OpenAPI + Typescript
Eine Geschichte über den Versuch, mehrere Python-Versionen auszuführen (Mac Edition)
Hinweise zur Verwendung der Tab-Vervollständigung beim interaktiven Ausführen von Python unter Windows
Eine Geschichte darüber, wie man in GAE / P über verstümmelte Charaktere nachdenken möchte
Alles vom Erstellen einer Python-Umgebung bis zur Ausführung unter Windows
Eine Geschichte, die es aufgegeben hat, JavaScripthon unter Windows auszuführen.
Migrieren Sie Django-Anwendungen, die unter Python 2.7 ausgeführt werden, auf Python 3.5
Eine Geschichte über einen magischen Umbau, der Lubuntu in ein Chromebook bringt
Erstellen Sie eine Python-Umgebung unter MacOS (Catallina)
Erstellen Sie eine Python-Umgebung auf Ihrem Mac
Ein Java-Programmierer studierte Python. (Über Typ)
Eine Geschichte über maschinelles Lernen mit Kyasuket
Ein Memo mit Python2.7 und Python3 in CentOS
Erstellen Sie einen CGI-Server, der unter Python 3 in Docker ausgeführt wird
Eine Geschichte über das Erstellen eines anonymen Kanals mit Slack aus null Wissen
Die Geschichte, den Versuch aufzugeben, mit Heroku eine Verbindung zu MySQL herzustellen
Ein wenig mehr Details zur Einschlussnotation von Python
Führen Sie Python-Code in der A2019 Community Edition aus
Erstellen Sie eine Python + OpenCV-Umgebung in Cloud9
Die Geschichte der Verarbeitung A von Blackjack (Python)
[Python] Ein Fortschrittsbalken auf dem Terminal