script to use with errbot's exec plugin
This commit is contained in:
parent
833537692e
commit
e636523aac
3 changed files with 132 additions and 0 deletions
|
@ -778,4 +778,10 @@ $unittestUrl = null;
|
|||
*/
|
||||
$allowUnittestMode = false;
|
||||
|
||||
/**
|
||||
* bookmark-bot email address mapping
|
||||
* Input address as key, user email as target
|
||||
*/
|
||||
$botMailMap = array();
|
||||
|
||||
?>
|
||||
|
|
125
scripts/bookmark-bot.php
Executable file
125
scripts/bookmark-bot.php
Executable file
|
@ -0,0 +1,125 @@
|
|||
#!/usr/bin/env php
|
||||
<?php
|
||||
/**
|
||||
* CLI tool to add bookmarks to SemanticScuttle.
|
||||
* Intended as end point for a chat bot, e.g. "errbot-exec".
|
||||
*
|
||||
* Parameters:
|
||||
* 1. Message with bookmark url and tags
|
||||
* 2. E-Mail address of user
|
||||
*
|
||||
* You may map chat users to semanticscuttle email addresses
|
||||
* with the $botMailMap config variable
|
||||
*
|
||||
* @author Christian Weiske <cweiske@cweiske.de>
|
||||
* @link https://github.com/cweiske/errbot-exec
|
||||
*/
|
||||
require_once dirname(__FILE__) . '/../src/SemanticScuttle/header-standalone.php';
|
||||
|
||||
if ($argc < 3) {
|
||||
err('No message and user', 1);
|
||||
}
|
||||
$msg = $argv[1];
|
||||
$email = $argv[2];
|
||||
|
||||
if (preg_match('#(.+@.+)/.*#', $email, $matches)) {
|
||||
//xmpp user name with resource: user@example.org/client
|
||||
$email = $matches[1];
|
||||
}
|
||||
if (isset($botMailMap[$email])) {
|
||||
$email = $botMailMap[$email];
|
||||
}
|
||||
|
||||
function err($msg, $code)
|
||||
{
|
||||
echo $msg . "\n";
|
||||
exit($code);
|
||||
}
|
||||
|
||||
function getUserId($email)
|
||||
{
|
||||
$users = SemanticScuttle_Service_Factory::get('User');
|
||||
if (!$users->isValidEmail($email)) {
|
||||
err('Invalid e-mail address: ' . $email, 2);
|
||||
}
|
||||
$db = SemanticScuttle_Service_Factory::getDb();
|
||||
$res = $db->sql_query(
|
||||
'SELECT uId FROM '. $users->getTableName()
|
||||
. ' WHERE email = "' . $db->sql_escape($email) . '"'
|
||||
);
|
||||
$row = $db->sql_fetchrow($res);
|
||||
if (!is_array($row)) {
|
||||
err('User not found: ' . $email, 3);
|
||||
}
|
||||
return intval($row['uId']);
|
||||
}
|
||||
|
||||
function splitMsg($msg)
|
||||
{
|
||||
$bmUrl = $msg;
|
||||
$rest = '';
|
||||
if (strpos($msg, ' ') !== false) {
|
||||
list($bmUrl, $rest) = explode(' ', $msg, 2);
|
||||
}
|
||||
$parts = parse_url($bmUrl);
|
||||
if (!isset($parts['scheme'])) {
|
||||
err('Scheme missing in URL', 2);
|
||||
}
|
||||
if (!SemanticScuttle_Model_Bookmark::isValidUrl($bmUrl)) {
|
||||
err('Invalid bookmark URL', 2);
|
||||
}
|
||||
|
||||
$bmTags = array();
|
||||
$bmDesc = '';
|
||||
$rest = trim($rest);
|
||||
if (strlen($rest) && $rest{0} == '#') {
|
||||
//tags begin with '#'
|
||||
preg_match_all('/#([a-zA-Z0-9]+)/', $rest, $matches);
|
||||
$bmTags = $matches[1];
|
||||
foreach ($matches[0] as $tag) {
|
||||
if (substr($rest, 0, strlen($tag)) == $tag) {
|
||||
$rest = trim(substr($rest, strlen($tag)));
|
||||
}
|
||||
}
|
||||
$bmDesc = $rest;
|
||||
} else {
|
||||
//use rest as tags
|
||||
$bmTags = explode(' ', $rest);
|
||||
$bmTags = array_map('trim', $bmTags);
|
||||
}
|
||||
|
||||
return array($bmUrl, $bmTags, $bmDesc);
|
||||
}
|
||||
|
||||
$userId = getUserId($email);
|
||||
list($bmUrl, $bmTags, $bmDesc) = splitMsg($msg);
|
||||
|
||||
$bookmarks = SemanticScuttle_Service_Factory::get('Bookmark');
|
||||
if ($bookmarks->bookmarkExists($bmUrl)) {
|
||||
echo "URL already bookmarked.\n";
|
||||
exit(0);
|
||||
}
|
||||
|
||||
$urlhelper = new SemanticScuttle_UrlHelper();
|
||||
$bmTitle = $urlhelper->getTitle($bmUrl);
|
||||
|
||||
$id = $bookmarks->addBookmark(
|
||||
$bmUrl,
|
||||
$bmTitle,
|
||||
$bmDesc,
|
||||
null,
|
||||
SemanticScuttle_Model_Bookmark::SPUBLIC,
|
||||
$bmTags,
|
||||
null,
|
||||
null,
|
||||
true,
|
||||
false,
|
||||
$userId
|
||||
);
|
||||
if ($id === false) {
|
||||
err('Error adding bookmark', 10);
|
||||
} else {
|
||||
echo "Bookmark created.\n";
|
||||
exit(0);
|
||||
}
|
||||
?>
|
|
@ -105,6 +105,7 @@ require_once 'SemanticScuttle/functions.php';
|
|||
require_once 'SemanticScuttle/Model/Bookmark.php';
|
||||
require_once 'SemanticScuttle/Model/UserArray.php';
|
||||
require_once 'SemanticScuttle/Model/User/SslClientCert.php';
|
||||
require_once 'SemanticScuttle/UrlHelper.php';
|
||||
|
||||
if (count($GLOBALS['serviceoverrides']) > 0
|
||||
&& !defined('UNIT_TEST_MODE')
|
||||
|
|
Loading…
Reference in a new issue