Я потратил пару часов на то, как проверять страницы 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 действительным или недействительным после выполнения преобразования регулярного выражения.
Пожалуйста помоги.
Вы можете сделать только запрос головы сделать 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 КБ — 5 КБ.
НЕТ использования регулярных выражений.
Все страницы проверены независимо от шаблона 🙂
Относительно регулярного выражения:
Ваше регулярное выражение, изменено:
^(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[\/]?$