Ich versuche, ein Modul zu erstellen, das einen Shortlink mit der Google Apps Shortlink-API erstellt (undokumentiert, da es sich noch in den Labors befindet).
Hier ist das Skript (auch unter http://drupalbin.com/18667 ):
function drapps_shortlinks_createlink($url, $verbose = FALSE, $bypass_validattion = FALSE) {
//loads ShortLink Class
include_once('ShortLink.php');
// URL validation with 2 clauses:
// 1 - FILTER_VALIDATE_URL -> tests if the url is well constructed
// 2 - @fopen -> tests if the URL actually exist
if (!filter_var($url, FILTER_VALIDATE_URL) OR !@fopen($url,"r")) {
// URL not valid or inexistant, so bail
if ($verbose) {
$msg = 'Invalid URL';
return $msg;
}
else {
return;
}
}
// Get configuration values
$domain = 'mydomain.com';
$key = 'someHMACKEY';
$user = 'username@mydomain.com';
// Check if user admin has configured DRAPPS and DRAPPS ShortLinks
if (!$domain OR !$key OR !$user) {
//Something is missing so bail
if ($verbose) {
$msg = 'DRAPPS Shortlinks is not configured. Please go to <a href="' . base_path() . 'admin/settings/drapps">admin/settings/drapps</a>';
return $msg;
}
else {
return;
}
}
//PHP Google Apps ShortLinks Implementation
$slink = new ShortLink($domain, $key, $user);
$r = clone $slink->pub($url);
$status = $r->status;
if ($status == 'ok') {
return $r;
}
elseif ($verbose) {
return $status;
}
else {
return;
}
}
Dieses Skript verwendet eine benutzerdefinierte Klasse namens SHortLink.php .
BEARBEITEN: Diese Funktion wird in Drupals node-news.tpl.php wie folgt aufgerufen:
...
<div class="test"><?php print drapps_shortlinks_createlink($url, TRUE, FALSE); ?></div>
...
test.php
<?php
$path = "path/to/drupal"; //changed for security reasons
include_once($path . 'sites/all/modules/drapps_shortlinks/drapps_shortlinks.inc');
$url = 'http://www.google.com/';
print drapps_shortlinks_createlink($url, TRUE, FALSE);
?>
Wenn ich zu http://www.mydomain.com/test/test.php gehe , funktioniert das Skript einwandfrei und ich erhalte eine "OK" -Antwort von Google. Ein kurzer Link wird erstellt und funktioniert einwandfrei. Wenn ich zu einem Nachrichtenknoten navigiere, wird das Skript in Ordnung ausgeführt, Google antwortet jedoch mit einem 403-Fehler (verboten).
EDIT_1: DIESES SCRIPT FUNKTIONIERT. Ich kann also mit Sicherheit davon ausgehen, dass der Resonanz dahinter eher mit Drupal als mit dem Skript selbst zu tun hat.
EDIT_2: Ich denke, die eigentliche Frage dahinter ist: Welche Gründe könnten dazu führen, dass sich ein Skript anders verhält, wenn es von Drupal aufgerufen wird? Jede Eingabe wird geschätzt: Brainstorming, Ideen, Tipps, Methoden zur Fehlerbehebung, alles, was Sie für hilfreich halten, werde ich wirklich schätzen.
print function function_name(..))