How to built Open Graph & Twitter Card Checker Tool

Open graph checker is a tool to validate the website page contains sufficient informations and it can be easily access by social media and it display as facebook post or twitter tweet in proper structure format.
open-graph-checker.php
1 <?php
2 //--
3 $outerHead = "<head>";
4 $outerHeadLength = strlen($outerHead);
5 $outerHeadStart = 0;
6 
7 $innerHead = "</head>";
8 $innerHeadLength = strlen($innerHead);
9 $innerHeadStart = 0;
10 //--
11 
12 //--
13 $outerMeta = "<meta";
14 $innerMeta = ">";
15 $metaPointer = 0;
16 //--
17 
18 //--
19 $metaPropertyBase = "property=''";
20 $metaPropertyPointer = 0;
21 //--
22 
23 //--
24 $metaContentBase = "content=''";
25 $metaContentPointer = 0;
26 //--
27 
28 $crawlOptions = array(
29 CURLOPT_RETURNTRANSFER => true,             // return web page
30 CURLOPT_HEADER         => false,            // don't return headers
31 CURLOPT_FOLLOWLOCATION => true,             // follow redirects
32 CURLOPT_ENCODING       => "",               // handle all encodings
33 CURLOPT_USERAGENT      => "algoberrybot",     // who am i
34 CURLOPT_AUTOREFERER    => true,             // set referer on redirect
35 CURLOPT_CONNECTTIMEOUT => 10,                  // timeout on connect
36 CURLOPT_TIMEOUT        => 10,                  // timeout on response
37 CURLOPT_MAXREDIRS      => 0                   // stop after 10 redirects
38 );
39 
40 $metaName = "";
41 $metaContent = "";
42 $openGraphList = array();
43 $twitterCardList = array();
44 $noMatchList = array();
45 
46 
47 $openGraphMetadata = array("og:title","og:type","og:image","og:url","og:audio","og:description","og:determiner","og:locale","og:locale:alternate","og:site_name","og:video","og:image","og:image:secure_url","og:image:type","og:image:width","og:image:height","og:image:alt","og:video","og:video:secure_url","og:video:type","og:video:width","og:video:height","og:audio","og:audio:secure_url","og:audio:type","music.song","music:duration","music:album","music:album:disc","music:album:track","music:musician","music:song:disc","music:song:track","music:musician","music:release_date","music.playlist","music.radio_station","music:creator","video.movie","video:actor","video:actor:role","video:director","video:writer","video:duration","video:release_date","video:tag","video.episode","video:series","video.tv_show","video.other","article:published_time","article:modified_time","article:expiration_time","article:author","article:section","article:tag","book:author","book:isbn","book:release_date","book:tag","profile:first_name","profile:last_name","profile:username","profile:gender");
48 $twitterCardMetadata = array("twitter:card","twitter:site","twitter:creator","twitter:url","twitter:title");
49 
50 
51 function checkCategory($type) {
52     global $openGraphMetadata,$twitterCardMetadata;
53     $category = "opengraph";
54     foreach($openGraphMetadata as $key => $value) {
55         if($type == $value) {
56             return $category;
57         }
58     }
59     $category = "twittercard";
60     foreach($twitterCardMetadata as $key => $value) {
61         if($type == $value) {
62             return $category;
63         }
64     }
65     $category = "nomatch";
66     return $category;
67 }
68 
69 function showList($base,$category) {
70     ?>
71     <div style="margin-bottom:40px;">
72     <h3><?php echo $category; ?></h3>
73     <table width="100%">
74     <tr>
75         <th valign='top'>SR.No</th>
76         <th valign='top'>Tag Name</th>
77         <th valign='top'>Value</th>
78     </tr>
79     <?php
80     $count = 1;
81     foreach($base as $key => $value) {
82         if(count($value)>=2) {
83             foreach($value as $innerKey => $innerValue) {
84                 echo "<tr><td>".$count."</td><td>".$key."</td><td>".$innerValue."</td></tr>";
85                 $count++;
86             }
87         }
88         else
89         {
90             echo "<tr><td>".$count."</td><td>".$key."</td><td>".$value[0]."</td></tr>";
91             $count++;
92         }
93     }
94     ?>
95     </table>
96     </div>
97     <?php
98 }
99 
100 $url = "";
101 $validURL = "";
102 if(isset($_POST["auditbutton"]) && isset($_POST["url"])) {
103     $url = trim($_POST["url"]);
104     if($url != "") {
105         if(filter_var($url,FILTER_VALIDATE_URL) == true) {
106             $validURL = $url; 
107         }
108     }
109     else
110     {
111         $url = " ";
112     }
113 }
114 ?>
115 <html>
116     <head>
117         <title>Open Graph & Twitter Card Checker Tool</title>
118         <style>
119         body {
120         font-family: 'Merriweather', serif;
121         font-size:14px;
122         }
123 
124         h1 {
125         font-size:16px;
126         }
127 
128         table {
129         border-collapse: collapse;
130         width: 100%;
131         }
132 
133         th {
134         font-size:15px;
135         }
136         
137         td, th {  
138         border: 1px solid #ddd;
139         text-align: left;
140         padding: 15px;
141         }
142         
143         .error {
144         color:red;
145         }    
146         </style>
147     </head>
148     <body>
149         <h2>Open Graph & Twitter Card Checker Tool</h2>
150         <div>
151             <form action="open-graph-checker.php" method="post">
152             <input type="input" name="url" value="<?php echo $url; ?>" placeholder="https://www.algoberry.com"/>
153             <input type="submit" name="auditbutton" value="Audit"/>
154             </form>
155         </div>
156         <div style="margin-top:10px;margin-bottom:15px;">
157         <?php
158         if($validURL != "") {
159             $curlObject = curl_init($validURL);
160             curl_setopt_array($curlObject,$crawlOptions);
161             $webPageContent = curl_exec($curlObject);
162             $errorNumber = curl_errno($curlObject);
163             curl_close($curlObject);
164             if($errorNumber == 0) {
165                 $webPageCounter = 0;
166                 $webPageLength = strlen($webPageContent);
167                 //-------- Head Session Start  --------
168                 while($webPageCounter < $webPageLength) {
169                     $character = $webPageContent[$webPageCounter];
170                     //-------- Escape Character Start  --------
171                     if($character == "") {    
172                         $webPageCounter++;    
173                         continue;
174                     }
175                     //-------- Escape Character End  --------
176                     //-------- Outer Head Start  --------
177                     if($outerHead[$outerHeadStart] == $character) {
178                         $outerHeadStart++;
179                         if($outerHeadStart == $outerHeadLength) {
180                             $outerHeadStart = 0;
181                             $webPageCounter++;
182                             while($webPageCounter < $webPageLength) {
183                                 $character = $webPageContent[$webPageCounter];
184                                 //-------- Escape Character Start  --------
185                                 if($character == "") {    
186                                     $webPageCounter++;    
187                                     continue;
188                                 }
189                                 //-------- Escape Character End  --------
190                                 //-------- Outer Meta Start  --------
191                                 if($outerMeta[$metaPointer] == $character) {
192                                     $metaPointer++;
193                                     if($metaPointer == 5) {
194                                         $metaPointer = 0;
195                                         $webPageCounter++;
196                                         while($webPageCounter < $webPageLength) {
197                                             $character = $webPageContent[$webPageCounter];
198                                             //-------- Escape Character Start  --------
199                                             if($character == "") {    
200                                                 $webPageCounter++;    
201                                                 continue;
202                                             }
203                                             //-------- Escape Character End  --------
204                                             //-------- Meta Property Start  --------
205                                             if($metaPropertyBase[$metaPropertyPointer] == $character || ($metaPropertyPointer == 9 && $character == "\"")) {
206                                                 if($metaPropertyPointer == 9) {
207                                                     $metaPropertyPointer = 0;
208                                                     $webPageCounter++;
209                                                     while($webPageCounter < $webPageLength) {
210                                                         if($webPageContent[$webPageCounter] != "'" && $webPageContent[$webPageCounter] != "\"")
211                                                         {    $metaName .= $webPageContent[$webPageCounter]; }
212                                                         else
213                                                         {    break;    }
214                                                         $webPageCounter++;
215                                                     }
216                                                     $metaName = trim($metaName);
217                                                 }
218                                                 else
219                                                 {    $metaPropertyPointer++;    }
220                                             }
221                                             else
222                                             {    $metaPropertyPointer = 0;    }
223                                             //-------- Meta Property End  --------
224                                             //-------- Meta Content Start  --------
225                                             if($metaContentBase[$metaContentPointer] == $character || ($metaContentPointer == 8 && $character == "\"")) {
226                                                 if($metaContentPointer == 8) {
227                                                     $metaContentPointer = 0;
228                                                     $webPageCounter++;
229                                                     $titleStart = $webPageCounter;
230                                                     $titleEnd = $webPageCounter;
231                                                     while($webPageCounter < $webPageLength) {
232                                                         if($webPageContent[$webPageCounter] != "'" && $webPageContent[$webPageCounter] != "\"")
233                                                         {    $metaContent .= $webPageContent[$webPageCounter]; }
234                                                         else
235                                                         {    
236                                                             $titleEnd = $webPageCounter - 1;
237                                                             break;    
238                                                         }
239                                                         $webPageCounter++;
240                                                     }
241                                                     $metaContent = trim($metaContent);
242                                                 }
243                                                 else
244                                                 {    $metaContentPointer++;    }
245                                             }
246                                             else
247                                             {    $metaContentPointer = 0;    }
248                                             //-------- Meta Content End  --------
249                                             //-------- Inner Meta Start  --------
250                                             if($character == $innerMeta) {
251                                                 if($metaName != "") {
252                                                     $metaName = strtolower($metaName);
253                                                     $type = checkCategory($metaName);
254                                                     if($type == "opengraph") {
255                                                         $openGraphList[$metaName][] = $metaContent;
256                                                     }
257                                                     else if($type == "twittercard") {
258                                                         $twitterCardList[$metaName][] = $metaContent;
259                                                     } 
260                                                     else
261                                                     {
262                                                         $noMatchList[$metaName][] = $metaContent;
263                                                     }
264                                                 }
265                                                 $metaName = "";
266                                                 $metaContent = "";
267                                                 break;
268                                             }
269                                             //-------- Inner Meta End  --------
270                                             $webPageCounter++;
271                                         }
272                                     }
273                                 }
274                                 else
275                                 {    $metaPointer = 0;    }
276                                 //-------- Outer Meta End  --------
277                                 //-------- Inner Head Start  --------
278                                 if($innerHead[$innerHeadStart] == $character) {
279                                     $innerHeadStart++;
280                                     if($innerHeadStart == $innerHeadLength) {
281                                         $innerHeadStart = 0;
282                                         $headFound = 1;
283                                         break;
284                                     }
285                                 }
286                                 else if($innerHeadStart != 6)
287                                 {    $innerHeadStart = 0;    }
288                                 //-------- Inner Head End  --------
289                                 $webPageCounter++;
290                             }
291                             if($headFound == 1) {    
292                                 $webPageCounter++;
293                                 break;    
294                             }
295                         }
296                     }
297                     else if($outerHeadStart != 5)
298                     {    $outerHeadStart = 0;    }
299                     //-------- Outer Head End  --------
300                     $webPageCounter++;
301                 }
302                 //-------- Head Session End  --------
303                 
304                 if(count($openGraphList)>=1) {
305                     showList($openGraphList,"Open Graph Tags");
306                 }
307                 if(count($twitterCardList)>=1) {
308                     showList($twitterCardList,"Twitter Card Tags");
309                 }
310                 if(count($noMatchList)>=1) {
311                     showList($noMatchList,"Miscellaneous Tags");
312                 }
313             }
314             else
315             {
316             ?>
317             <div class="error">Unable to access now</div>
318             <?php
319             }
320         }
321         else
322         {
323             if($url != "") {
324             ?>
325             <div class="error">Please enter valid URL</div>
326             <?php
327             }    
328         }
329         ?>
330         </div>
331         <div>
332         Created by <a href = "https://www.algoberry.com" target="_blank">https://www.algoberry.com</a>
333         </div>
334     </body>
335 </html>

No comments:

Post a Comment