diff options
| author | Christian Weiske <cweiske@cweiske.de> | 2016-05-09 21:41:32 +0200 | 
|---|---|---|
| committer | Christian Weiske <cweiske@cweiske.de> | 2016-05-09 21:41:32 +0200 | 
| commit | e636523aac630d73cda415cf551d0be570ce10d6 (patch) | |
| tree | 1d8020a6eca58d0d2303f90aaf546301df341563 | |
| parent | 833537692e62db2a7dea1c9eb74b79c5311fc39b (diff) | |
| download | semanticscuttle-e636523aac630d73cda415cf551d0be570ce10d6.tar.gz semanticscuttle-e636523aac630d73cda415cf551d0be570ce10d6.tar.bz2  | |
script to use with errbot's exec plugin
| -rw-r--r-- | data/config.default.php | 6 | ||||
| -rwxr-xr-x | scripts/bookmark-bot.php | 125 | ||||
| -rw-r--r-- | src/SemanticScuttle/header.php | 1 | 
3 files changed, 132 insertions, 0 deletions
diff --git a/data/config.default.php b/data/config.default.php index 5e560a7..8af04ba 100644 --- a/data/config.default.php +++ b/data/config.default.php @@ -778,4 +778,10 @@ $unittestUrl = null;   */  $allowUnittestMode = false; +/** + * bookmark-bot email address mapping + * Input address as key, user email as target + */ +$botMailMap = array(); +  ?> diff --git a/scripts/bookmark-bot.php b/scripts/bookmark-bot.php new file mode 100755 index 0000000..126f39c --- /dev/null +++ b/scripts/bookmark-bot.php @@ -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); +} +?> diff --git a/src/SemanticScuttle/header.php b/src/SemanticScuttle/header.php index 1f2f12c..562ae43 100644 --- a/src/SemanticScuttle/header.php +++ b/src/SemanticScuttle/header.php @@ -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')  | 
