Невозможно получить ссылку с внешнего URL и показать ее на странице HTML - PullRequest
0 голосов
/ 15 января 2020

Я пытаюсь записать файл html, в котором у меня есть URL-ссылка, и подобное имя является названием самой ссылки.

Для этого я следую ответу, предложенному в второй ответ следующего поста: Как я могу получить заголовок веб-страницы по URL (внешнему URL), используя JQuery / JS

<!DOCTYPE html>
<html>
    <head>
        <script>
        function getTitle(externalUrl){
          var proxyurl = "./get_external_content.php?url=" + externalUrl;
          $.ajax({
            url: proxyurl,
            async: true,
            success: function(response) {
              alert(response);
            },   
            error: function(e) {
              alert("error! " + e);
            }
          });
        }
        </script>
    </head>
<body>

<!-- Link to news -->
<a href="https://www.corriere.it/economia/tasse/cards/irpef-2020-come-cambiano-scaglioni-studio-riforma-aliquote/mosse-governo_principale.shtml">Notizia Corriere</a>.


getTitle("https://www.corriere.it/economia/tasse/cards/irpef-2020-come-cambiano-scaglioni-studio-riforma-aliquote/mosse-governo_principale.shtml")

Файл PHP вместо этого выглядит так:

<?php
function file_get_contents_curl($url){
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    $data = curl_exec($ch);
    curl_close($ch);
    return $data;
}

$url = $_REQUEST["url"];
$html = file_get_contents_curl($url);

preg_match('/<title>(.+)<\/title>/',$html,$matches);
$title = $matches[1];

echo  json_encode(array("url" => $url, "title" => $title));

Я должен сказать, что не уверен, что я правильно вызываю функцию. php и то же самое для функции getTitle. Для многих из вас это может быть базовый c вопрос, но у меня нет опыта работы с html / php, и я не могу обойти эту проблему. Сможете ли вы привести меня к правильному пути решения этой проблемы?

1 Ответ

0 голосов
/ 15 января 2020

Код работает хорошо, хотя улучшения могут быть сделаны. Убедитесь, что вы включили jquery сценарии CDN. Убедитесь, что вы звоните getTitle в теге <script></script>. Убедитесь, что путь к сценарию php действителен. Как указывалось ранее, нажатие клавиши F12 в браузере -> вкладка «Сеть» может помочь в диагностике проблем с запросами / ответами.

<!DOCTYPE html>
<html>
    <head>
        <script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
        <script>
        function getTitle(externalUrl){
          var proxyurl = "./get_external_content.php?url=" + externalUrl;
          $.ajax({
            url: proxyurl,
            async: true,
            success: function(response) {
              alert(response.title);
            },   
            error: function(e) {
              alert("error! " + e);
            }
          });
        }
        getTitle("https://www.corriere.it/economia/tasse/cards/irpef-2020-come-cambiano-scaglioni-studio-riforma-aliquote/mosse-governo_principale.shtml");
        </script>
    </head>
<body>

Для лучшего результата необходимо указать тип содержимого JSON в ответе PHP:

<?php
function file_get_contents_curl($url){
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    $data = curl_exec($ch);
    curl_close($ch);
    return $data;
}

$url = $_REQUEST["url"];
$html = file_get_contents_curl($url);

preg_match('/<title>(.+)<\/title>/',$html,$matches);
$title = $matches[1];

header('Content-Type: application/json', true);
echo  json_encode(array("url" => $url, "title" => $title));

...