私は現在、さまざまなソーシャル ネットワークのリンクを統合するツールに取り組んでいます。
Facebook: https://www.facebook.com/jonathan.parentlevesque
Google plus: https://plus.google.com/+JonathanParentL%C3%A9vesque
Instagram: https://instagram.com/mariloubiz/
Pinterest: https://www.pinterest.com/jonathan_parl/
RSS: https://regex101.com
Twitter: https://twitter.com/arcadefire
Vimeo: https://vimeo.com/ondemand/crashtest/135301838
Youtube: https://www.youtube.com/user/Darkjo666
私はこのような非常に基本的な正規表現を使用しています:
/^https?:\/\/(?:[a-z]{2}|[w]{3})?\.pinterest.com\/[\S]{5,}$/i
クライアント側とサーバー側で、各リンクで最小限のドメイン検証を行います。
次に、この関数を使用して、ページが実際に存在することを検証しています (結局機能しないソーシャル ネットワーク リンクを統合しても意味がありません)。
public static function isUrlExists($url){
$exists = false;
if(!StringManager::stringStartWith($url, "http") and !StringManager::stringStartWith($url, "ftp")){
$url = "https://" . $url;
}
if (preg_match(RegularExpression::URL, $url)){
$headers = get_headers($url);
if ($headers !== false and !empty($headers)){
if (strpos($headers[0], '404') === false){
$exists = true;
}
}
}
return $exists;
}
注: この関数では、リクエストを送信する前に URL を検証するために Diego Perini の正規表現を使用しています。
const URL = "%^(?:(?:https?|ftp)://)(?:\S+(?::\S*)?@|\d{1,3}(?:\.\d{1,3}){3}|(?:(?:[a-z\d\x{00a1}-\x{ffff}]+-?)*[a-z\d\x{00a1}-\x{ffff}]+)(?:\.(?:[a-z\d\x{00a1}-\x{ffff}]+-?)*[a-z\d\x{00a1}-\x{ffff}]+)*(?:\.[a-z\x{00a1}-\x{ffff}]{2,6}))(?::\d+)?(?:[^\s]*)?$%iu"; //@copyright Diego Perini
これまでにテストしたすべてのリンクでエラーは発生しませんでしたが、Pinterest をテストすると、次の非常に恐ろしい一連のエラー メッセージが表示されます。
get_headers(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
Array
(
[url] => https://www.pinterest.com/jonathan_parl/
[exists] =>
)
get_headers(): Failed to enable crypto
Array
(
[url] => https://www.pinterest.com/jonathan_parl/
[exists] =>
)
get_headers(https://www.pinterest.com/jonathan_parl/): failed to open stream: operation failed
Array
(
[url] => https://www.pinterest.com/jonathan_parl/
[exists] =>
)
ここで私が間違っていることを知っている人はいますか?
つまり、Pinterest は有効な証明書を持つ人気のあるソーシャル ネットワークではありませんか (個人的には使用していません。テスト用にアカウントを作成しただけです)。
ご協力ありがとうございました、
モントリオール出身のジョナサン・パレント・レベスク