diff --git a/serendipity_event_oembed/OEmbedDatabase.php b/serendipity_event_oembed/OEmbedDatabase.php
new file mode 100644
index 00000000..685e05ed
--- /dev/null
+++ b/serendipity_event_oembed/OEmbedDatabase.php
@@ -0,0 +1,80 @@
+type;
+ $oeobj = serialize($oembed);
+ $query = "insert into {$serendipity['dbPrefix']}" . PLUGIN_OEMBED_DATABASEVNAME . " (urlmd5,url,oetype,oeobj) VALUES ('$urlmd5','$url','$oetype','$oeobj')";
+ return serendipity_db_query($query);
+ }
+
+ function load_oembed($url) {
+ global $serendipity;
+ if (empty($url)) return null;
+
+ $urlmd5 = md5($url);
+ $query = "select oeobj from {$serendipity['dbPrefix']}" . PLUGIN_OEMBED_DATABASEVNAME . " where urlmd5='$urlmd5'";
+
+ $rows = serendipity_db_query($query);
+ if (!is_array($rows)) { // fresh search
+ return null;
+ }
+ else {
+ $oeobj = null;
+ foreach ($rows as $row) {
+ $oeobj = $row['oeobj'];
+ if (!empty($oeobj)) break;
+ }
+ if (!empty($oeobj)) {
+ return unserialize($oeobj);
+ }
+
+ }
+ return null;
+ }
+
+ function install(&$obj) {
+ global $serendipity;
+
+ if (!OEmbedDatabase::table_created(PLUGIN_OEMBED_DATABASEVNAME)) {
+ $md5test = md5("test");
+ $md5len = strlen($md5test);
+ $q = "create table {$serendipity['dbPrefix']}" . PLUGIN_OEMBED_DATABASEVNAME. " (" .
+ "urlmd5 char($md5len) not null, " .
+ "url varchar(3000) not null, " .
+ "oetype varchar(20) not null, " .
+ "oeobj text not null, " .
+ "primary key (urlmd5)" .
+ ")";
+
+ $result = serendipity_db_schema_import($q);
+
+ if ($result !== true) {
+ return;
+ }
+ }
+ }
+
+
+ function table_created($table = PLUGIN_OEMBED_DATABASEVNAME) {
+ global $serendipity;
+
+ $q = "select count(*) from {$serendipity['dbPrefix']}" . $table;
+ $row = serendipity_db_query($q, true, 'num');
+
+ if (!is_numeric($row[0])) { // if the response we got back was an SQL error.. :P
+ return false;
+ } else {
+ return true;
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/serendipity_event_oembed/oembed/OEmbedProvider.class.php b/serendipity_event_oembed/oembed/OEmbedProvider.class.php
index 94345e82..9942c250 100644
--- a/serendipity_event_oembed/oembed/OEmbedProvider.class.php
+++ b/serendipity_event_oembed/oembed/OEmbedProvider.class.php
@@ -48,6 +48,10 @@ class OEmbedProvider extends EmbedProvider{
}
private function provideObject($url){
$xml=simplexml_load_string($this->provideXML($url));
+ if (empty($xml)) {
+ $data=$this->provide($url);
+ if (!empty($$data)) $xml = json_decode($data);
+ }
//TODO $xml->type alapjan assigner
$obj = $this->getTypeObj((string)$xml->type);
$obj->cloneObj($xml);
diff --git a/serendipity_event_oembed/oembed/config.php b/serendipity_event_oembed/oembed/config.php
index 8046154d..7ddc4bf6 100644
--- a/serendipity_event_oembed/oembed/config.php
+++ b/serendipity_event_oembed/oembed/config.php
@@ -21,7 +21,9 @@ require_once dirname(__FILE__) . '/' . 'VideoEmbed.class.php';
require_once dirname(__FILE__) . '/' . 'EmbedProvider.class.php';
require_once dirname(__FILE__) . '/' . 'OEmbedProvider.class.php';
-require_once dirname(__FILE__) . '/' . 'YouTubeProvider.class.php';
+
+// Will be loaded via generic oembedprovider!
+//require_once dirname(__FILE__) . '/' . 'YouTubeProvider.class.php';
require_once dirname(__FILE__) . '/' . 'ProviderManager.class.php';
diff --git a/serendipity_event_oembed/oembed/providers.xml b/serendipity_event_oembed/oembed/providers.xml
index f4ccfcca..d2e6af9e 100644
--- a/serendipity_event_oembed/oembed/providers.xml
+++ b/serendipity_event_oembed/oembed/providers.xml
@@ -4,10 +4,12 @@
http://*.flickr.com/*
http://www.flickr.com/services/oembed/
+
https://*.twitter.com/*
https://api.twitter.com/1/statuses/oembed.{format}
@@ -16,9 +18,29 @@
http://*.vimeo.com/*
http://vimeo.com/api/oembed.{format}
+
+
+ http://*.youtube.com/watch?v=*
+ http://www.youtube.com/oembed
+
+
+ http://*.youtu.be/*
+ http://www.youtube.com/oembed
+
+
+
+ http://official.fm/tracks/*
+ http://official.fm/services/oembed.{format}
+
+
+
+ http://blip.tv/*
+ http://blip.tv/oembed
+
diff --git a/serendipity_event_oembed/oembed/tests/ProviderManagerTest.php b/serendipity_event_oembed/oembed/tests/ProviderManagerTest.php
index e9001780..0ee1ae52 100644
--- a/serendipity_event_oembed/oembed/tests/ProviderManagerTest.php
+++ b/serendipity_event_oembed/oembed/tests/ProviderManagerTest.php
@@ -12,13 +12,13 @@ function test($manager, $url) {
$manager = ProviderManager::getInstance();
// Youtube long link
-test($manager,"http://www.youtube.com/watch?v=8UVNT4wvIGY");
+//test($manager,"http://www.youtube.com/watch?v=8UVNT4wvIGY");
// Youtube Kurze URL
-test($manager,"http://youtu.be/8UVNT4wvIGY");
+//test($manager,"http://youtu.be/8UVNT4wvIGY");
// Twitter
-test($manager,"https://twitter.com/#!/tagesschau/status/146562892454572032");
+//test($manager,"https://twitter.com/#!/tagesschau/status/146562892454572032");
// flickr
test($manager,"http://www.flickr.com/photos/gbrockhaus/2052855443/in/set-72157603214268227/");
// vimeo
-test($manager,"http://vimeo.com/33510073");
+//test($manager,"http://vimeo.com/33510073");
diff --git a/serendipity_event_oembed/serendipity_event_oembed.php b/serendipity_event_oembed/serendipity_event_oembed.php
index f104c8c8..443b1f4f 100644
--- a/serendipity_event_oembed/serendipity_event_oembed.php
+++ b/serendipity_event_oembed/serendipity_event_oembed.php
@@ -11,8 +11,9 @@ if (file_exists($probelang)) {
}
include dirname(__FILE__) . '/lang_en.inc.php';
-include_once dirname(__FILE__) . '/oembed/config.php'; // autoload oembed classes
-
+require_once dirname(__FILE__) . '/oembed/config.php'; // autoload oembed classes
+require_once dirname(__FILE__) . '/OEmbedDatabase.php';
+
class serendipity_event_oembed extends serendipity_event
{
@@ -39,11 +40,17 @@ class serendipity_event_oembed extends serendipity_event
'frontend_display' => true,
));
- //$propbag->add('configuration', array('max_items','ext_vis_stat','stat_all','banned_bots'));
+ $propbag->add('configuration', array('info'));
}
function introspect_config_item($name, &$propbag)
{
+ switch($name) {
+ case 'info':
+ $propbag->add('type', 'content');
+ $propbag->add('default', "Info");
+ break;
+ }
}
function event_hook($event, &$bag, &$eventData) {
@@ -54,7 +61,7 @@ class serendipity_event_oembed extends serendipity_event
if ($simplePatterns==null) {
$simplePatterns = array(
//'simpleTweet' => '@\(tweet\s+(\S*)\)@Usi',
- 'simpleTweet' => '@\(tweet\s+(.*)\)@Usi',
+ 'simpleTweet' => '@\[(?:embed|tweet)\s+(.*)\]@Usi',
);
}
@@ -86,27 +93,51 @@ class serendipity_event_oembed extends serendipity_event
array( $this, "oembedRewriteCallback"),
$eventData['body']);
}
- /*
if (!empty($eventData['extended'])) {
- $eventData['extended'] = preg_replace_callback(
+ $eventData['body'] = preg_replace_callback(
$patterns['simpleTweet'],
array( $this, "oembedRewriteCallback"),
$eventData['extended']);
}
- */
}
function oembedRewriteCallback($match) {
$url = $match[1];
- //$url = "http://www.flickr.com/photos/gbrockhaus/2052855443/in/set-72157603214268227/";
- //print "
callback
";
- print_r($match[1]);
- $manager = ProviderManager::getInstance();
- $obj=$manager->provide($url,"object");
+ $obj = OEmbedDatabase::load_oembed($url);
+ $html = '';
+ if (empty($obj)) {
+ $manager = ProviderManager::getInstance();
+ try {
+ $obj=$manager->provide($url,"object");
+ if (!empty($obj)) {
+ OEmbedDatabase::save_oembed($url,$obj);
+ }
+ }
+ catch (ErrorException $e) {
+ // Timeout in most cases
+ //return $e;
+ }
+ }
if (!empty($obj)) {
- if ($obj->type == 'rich') return $obj->html;
+ if ($obj->type == 'rich')
+ $html = $obj->html;
+ elseif ($obj->type == 'video')
+ $html = $obj->html;
+ elseif ($obj->type == 'photo') {
+ $html = '';
+ }
}
- return $match[0];
+ else {
+ $html = '' . $match[1] . '';
+ }
+ return '' . $html . '';
}
-
+
+ function cleanup() {
+ OEmbedDatabase::install($this);
+ }
+ function install() {
+ OEmbedDatabase::install($this);
+ }
+
}
\ No newline at end of file