Ceci est le premier message de Qiita. Cette fois, je voudrais garder un mémorandum sur la façon de "exécuter Python sur PHP sur Heroku", sur lequel je suis tombé par hasard pendant environ 3 heures à un mauvais endroit. J'écris avec la mort cérébrale. Ce serait formidable si vous pouviez voir les erreurs typographiques avec un œil chaleureux.
Au début, je me demandais si je pouvais publier des informations de grattage sur la page Web. Mais le scraping est facile si vous l'écrivez en Python! C'est l'entrée de la porte de l'enfer qui a commencé.
Je pensais que ce serait bien d'avoir les meilleures nouvelles pour le moment, j'ai donc écrit le code suivant.
# coding: utf-8
import requests
from bs4 import BeautifulSoup
#Obtenez l'ID de page des principales actualités actuelles
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/",""))
#Obtenir des informations sur les sujets d'actualité
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)
Vous pouvez exécuter des commandes de ligne de commande avec exec et placer la sortie dans des variables. Écrivez PHP comme suit.
<?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>
L'important est la partie ** exec ("export LANG = ja_JP.UTF-8"); **.
UTF-8, qui existe depuis un certain temps. C'est la première des batailles difficiles. PHP dit essentiellement que le code de caractère doit être écrit en ** UTF-8 **. La sortie Python devait également être unifiée avec utf-8, qui était bloquée là au début. (Le côté Python était Shift-JIS)
C'est fait! Déployez et voyez ce qui se passe! Lorsque je déploie et ouvre l'URL ...
\\ Actuellement, Heroku ne peut pas traiter la demande //
Oui. Voici l'erreur. Le déploiement a réussi, mais j'étais dans un état nande. L'essentiel est que si vous souhaitez exécuter PHP et Python sur Heroku en même temps, vous aurez besoin de deux BuildPacks. Mettons-le comme ça. Cette fois, ** les pages Web sont les principales **, donc l'ordre est PHP-> Python.
Cela devrait être bien! Ici et là! Et quand j'essaye de déployer
\\ Deploy failed //
Hmmm ça. Quand j'ai attrapé le journal cette fois, j'ai trouvé le contenu suivant.
-----> 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
Une recherche pour cela révèle que les fichiers nécessaires à l'application Python sont manquants. Créons-le. Voici ce dont vous avez besoin pour ce code Python:
#requirement.txt
beautifulsoup4==4.9.1
requests==2.24.0
#runtime.txt
python-3.7.7
Le déploiement avec cela a bien fonctionné.
J'ai passé une journée à me débattre avec les codes des personnages et à créer un environnement pour Heroku. Je déteste le japonais. Au fait, lorsque j'ai créé un environnement de test avec XAMPP, j'étais plus préoccupé par le code des caractères que par Heroku. Cette fois, je suis content car l'affichage a réussi pour le moment.
Sites informés que BuildPack est requis https://stackoverflow.com/questions/12126439/run-python-and-php-in-a-single-heroku-app-procfile
Un site qui connaît les fichiers nécessaires pour préparer l'environnement d'exécution de Python sur Heroku https://teratail.com/questions/258801
(Un site qui a aidé à gérer les erreurs secrètes) Après le code de déploiement = H14 desc = "Aucun processus Web en cours d'exécution" https://qiita.com/rebi/items/efd1c36f0a9e46222d80
Recommended Posts