Notion backlinks checker
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/* | |
* Notion Backlinks Checker in PHP | |
* PHP requirement: https://github.com/brd6/notion-sdk-php | |
* Notion requirement: database table with columns: Name, OK, URL, Target, My URL, My Target, Contact, Latest Check | |
* read more: | |
* [CZ]: https://www.maxiorel.cz/notion-php-backlink-kontrola | |
* [EN] https://www.maxiorel.com/notion-php-backlink-checker | |
* */ | |
require "vendor/autoload.php"; | |
use Brd6\NotionSdkPhp\Client; | |
use Brd6\NotionSdkPhp\ClientOptions; | |
use \Brd6\NotionSdkPhp\Resource\Database\DatabaseRequest; | |
// Slightly modified version of https://gist.github.com/nedevl/f6fb87ab53f3c765c8eb5e09b16817fe | |
function backlinkCheck($backlink, $url) { | |
$backlinkexists = false; | |
$backlinknofollow = false; | |
$content = file_get_contents($url); | |
$dom = new DomDocument(); | |
libxml_use_internal_errors(true); | |
$dom -> loadHTML($content); | |
$anchors = $dom -> getElementsByTagName('a'); | |
libxml_clear_errors(); | |
foreach ($anchors as $anchor) { | |
$link = $anchor -> getAttribute("href"); | |
//check if the link exists among links on the $url | |
if ($link == $backlink) { | |
$backlinkexists = true; | |
$anchorhtml = strtolower($anchor -> C14N()); | |
if (strpos($anchorhtml, 'nofollow') !== false) { | |
$backlinknofollow = true; | |
} | |
break; | |
} | |
} | |
if ($backlinkexists && !$backlinknofollow) { | |
// backlink exists and it doesn't has a rel attribute with nofollow value | |
return TRUE; | |
} else if ($backlinkexists && $backlinknofollow) { | |
// backlink exists and it does has a rel attribute with nofollow value | |
return FALSE; | |
} else { | |
// backlink doesn't exists | |
return FALSE; | |
} | |
} | |
$options = (new ClientOptions()) | |
->setAuth('YOUR_NOTION_INTEGRATION_TOKEN'); | |
$notion = new Client($options); | |
$databaseRequest = new DatabaseRequest(); | |
$myPage = $notion->databases()->query('YOUR_DATABASE_MACHINE_NAME', $databaseRequest); | |
$results = $myPage->getResults(); | |
foreach ($results as $result){ | |
$page = $notion->pages()->retrieve($result->getId()); | |
$properties = $page->getProperties(); | |
$url = $properties['URL']->getUrl(); | |
echo 'Checking '.$url. "\n"; | |
$target = $properties['Target']->getUrl(); | |
$check = backlinkCheck( $target, $url); | |
$properties['OK']->setCheckbox($check); | |
$page->setProperties([ | |
'OK' => $properties['OK'], | |
'Latest Check' => ['date' => ['start' => date('c'), 'end' => date('c')] ] | |
]); | |
$pageUpdated = $notion->pages()->update($page); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment