Срок действия страницы Facebook, где она действительно существует, и ее структура URL

Я потратил пару часов на то, как проверять страницы Facebook. Я нашел и прочитал много статей / сообщений, но не нашел то, что соответствует моим требованиям. Я хотел преобразовать введенный пользователем URL-адрес ($ rawurl) в нужный мне формат ($ goodurl), и при поиске в Google я нашел способ сделать это, но он очень сложный, трудный для понимания и нуждается в помощи.

Пользователь может вводить URL так, как ему нравится
пример:

http://facebook.com/WillSmith,
https://facebook.com/WillSmith,
http://www.facebook.com/WillSmith,
https://www.facebook.com/WillSmith,
www.facebook.com/WillSmith
or just facebook.com/WillSmith

Или любым другим способом. Помимо этого, кроме формата URL-адреса тщеславия, страницы facebook также имеют другой формат, например facebook.com/pages/usernames/somenumbers. Субдомены, такие как en-gb.facebook.com, усложняют ситуацию. Таким образом, после поиска в Google больше, я нашел регулярное выражение http[s]?://(www|[a-zA-Z]{2}-[a-zA-Z]{2})\.facebook\.com/(pages/[a-zA-Z0-9\.-]+/[0-9]+|[a-zA-Z0-9\.-]+)[/]?$ но не уверен, что он позаботится обо всех вышеперечисленных условиях.

Помогите, что мне нужно:
1. Стандартный формат мне нужен https://www.facebook.com/WillSmith
2. Мне также нужно проверить, является ли это действительным URL. Например, указанный выше URL действителен, и если вы видите этот URL https://www.facebook.com/WillSmith555, он соответствует действующим критериям, но такой страницы на Facebook нет. Там написано: «Извините, эта страница недоступна. Ссылка, по которой вы переходили, может быть повреждена, или страница может быть удалена» со сломанным изображением.

После проверки этих двух критериев мне нужно получить эхо в файле php, является ли введенный пользователем URL действительным или недействительным после выполнения преобразования регулярного выражения.

Пожалуйста помоги.

0

Решение

Вы можете сделать только запрос головы сделать Facebook:

<?php

function header_req( $url )
{
$channel = curl_init();
curl_setopt($channel, CURLOPT_URL, $url);
curl_setopt($channel, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($channel, CURLOPT_TIMEOUT, 10);
curl_setopt($channel, CURLOPT_HEADER, true);
curl_setopt($channel, CURLOPT_NOBODY, true);
curl_setopt($channel, CURLOPT_RETURNTRANSFER, true);
curl_setopt($channel, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 6.1; rv:2.2) Gecko/20110201');
curl_setopt($channel, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($channel, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
curl_setopt($channel, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($channel, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_exec($channel);
$httpCode = curl_getinfo( $channel, CURLINFO_HTTP_CODE );
curl_close($channel);
return $httpCode;
}

$url = "https://www.facebook.com/WillSmith";

//lets check the url for facebook as host:// 1 add http if not found in URL
if ( stripos( $url , "http") !== 0)
$url = "http://" . $url;// 2 get facebook.com from URL
$host = parse_url( $url, PHP_URL_HOST );

// 3 if host is indeed facebook.com then continue
if ( stripos( $host , "facebook.com" ) )
{
$response = header_req($url);

if ( $response === 200 || $response === 302 )
echo "Page Found";
else
echo "Page Not Found";
}

?>

Преимущества этого:

  1. Он получит только заголовки страницы, которые будут около 1 КБ — 5 КБ.

  2. НЕТ использования регулярных выражений.

  3. Все страницы проверены независимо от шаблона 🙂

2

Другие решения

Относительно регулярного выражения:

  • Вы должны избежать косой черты с обратной косой чертой
  • Несколько модификаций, чтобы соответствовать всем вашим примерам

Ваше регулярное выражение, изменено:

^(http[s]?:\/\/)?((www|[a-zA-Z]{2}-[a-zA-Z]{2})\.)?facebook\.com\/(pages\/[a-zA-Z0-9\.-]+\/[0-9]+|[a-zA-Z0-9\.-]+)\b[\/]?$

демо: http://regex101.com/r/lN1tN6/1

1

По вопросам рекламы [email protected]