Как я могу получить заголовок веб-страницы по URL (внешнему URL) с помощью JQuery / JS - PullRequest
14 голосов
/ 26 октября 2011

Я новичок, так что извините, если это глупый вопрос ..

Итак, я пытался получить заголовок URL-адреса с помощью JQuery / JS. Я не хочу загружать содержимое URL, а затем анализировать в нем теги.

Позвольте мне быть более ясным, у меня есть набор URL, скажем, 20, для которых я хочу отобразить заголовки .. URL-адреса, на которые я ссылаюсь, не являются текущими URL-адресами, поэтому я не могу использовать js document.title ..

поэтому я хочу сделать что-то в форме SOMEFUNC.title (URL) и получить его заголовок. Есть ли такая функция?

Ответы [ 3 ]

16 голосов
/ 26 октября 2011

Примерно так должно работать:

$.ajax({
  url: externalUrl,
  async: true,
  success: function(data) {
    var matches = data.match(/<title>(.*?)<\/title>/);
    alert(matches[0]);
  }   
});

TheSuperTramp верен, выше не будет работать, если externalUrl находится за пределами вашего домена.Вместо этого создайте этот php-файл get_external_content.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));

, затем в javascript:

function getTitle(externalUrl){
  var proxyurl = "http://localhost/get_external_content.php?url=" + externalUrl;
  $.ajax({
    url: proxyurl,
    async: true,
    success: function(response) {
      alert(response);
    },   
    error: function(e) {
      alert("error! " + e);
    }
  });
}
11 голосов
/ 01 июля 2012

Вы также можете получить заголовок любой веб-страницы, используя этот API

http://textance.herokuapp.com/title/

$.ajax({
      url: "http://textance.herokuapp.com/title/www.bbc.co.uk",
      complete: function(data) {
        alert(data.responseText);
      }
});
2 голосов
/ 26 октября 2011

Междоменный запрос не работает с ajax, но вы можете написать на своем сервере скрипт, который извлекает заголовок данного сайта.

Если вы используете PHP, вы можете использовать file_get_contentsФункция preg_match для получения заголовка.Этот парень уже предоставил код для этого.

http://www.cafewebmaster.com/php-get-page-title-function

Затем в jQuery вы можете добавить это к событию или поместить в функцию.

//For the purpose of this example let's use google
var url = "http://www.google.com";

$.ajax({
  type: "POST",
  url: "./getURLTitle.php",
  data: "{url: \"" + url + "\"}",
  success: function(data) {
     //do stuff here with the result
     alert(data);
  }   
});
...