Simplepie is removed since we don't use it anymore
9
boot.php
|
@ -588,15 +588,6 @@ class App {
|
|||
if(x($_SERVER,'SERVER_NAME')) {
|
||||
$this->hostname = $_SERVER['SERVER_NAME'];
|
||||
|
||||
// See bug 437 - this didn't work so disabling it
|
||||
//if(stristr($this->hostname,'xn--')) {
|
||||
// PHP or webserver may have converted idn to punycode, so
|
||||
// convert punycode back to utf-8
|
||||
// require_once('library/simplepie/idn/idna_convert.class.php');
|
||||
// $x = new idna_convert();
|
||||
// $this->hostname = $x->decode($_SERVER['SERVER_NAME']);
|
||||
//}
|
||||
|
||||
if(x($_SERVER,'SERVER_PORT') && $_SERVER['SERVER_PORT'] != 80 && $_SERVER['SERVER_PORT'] != 443)
|
||||
$this->hostname .= ':' . $_SERVER['SERVER_PORT'];
|
||||
/*
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
require_once('library/HTML5/Parser.php');
|
||||
require_once('include/crypto.php');
|
||||
require_once('include/feed.php');
|
||||
|
||||
if(! function_exists('scrape_dfrn')) {
|
||||
function scrape_dfrn($url, $dont_probe = false) {
|
||||
|
@ -366,8 +367,6 @@ function probe_url($url, $mode = PROBE_NORMAL, $level = 1) {
|
|||
$network = NETWORK_TWITTER;
|
||||
}
|
||||
|
||||
// Twitter is deactivated since twitter closed its old API
|
||||
//$twitter = ((strpos($url,'twitter.com') !== false) ? true : false);
|
||||
$lastfm = ((strpos($url,'last.fm/user') !== false) ? true : false);
|
||||
|
||||
$at_addr = ((strpos($url,'@') !== false) ? true : false);
|
||||
|
@ -604,21 +603,6 @@ function probe_url($url, $mode = PROBE_NORMAL, $level = 1) {
|
|||
$vcard['nick'] = $addr_parts[0];
|
||||
}
|
||||
|
||||
/* if($twitter) {
|
||||
logger('twitter: setup');
|
||||
$tid = basename($url);
|
||||
$tapi = 'https://api.twitter.com/1/statuses/user_timeline.rss';
|
||||
if(intval($tid))
|
||||
$poll = $tapi . '?user_id=' . $tid;
|
||||
else
|
||||
$poll = $tapi . '?screen_name=' . $tid;
|
||||
$profile = 'http://twitter.com/#!/' . $tid;
|
||||
//$vcard['photo'] = 'https://api.twitter.com/1/users/profile_image/' . $tid;
|
||||
$vcard['photo'] = 'https://api.twitter.com/1/users/profile_image?screen_name=' . $tid . '&size=bigger';
|
||||
$vcard['nick'] = $tid;
|
||||
$vcard['fn'] = $tid;
|
||||
} */
|
||||
|
||||
if($lastfm) {
|
||||
$profile = $url;
|
||||
$poll = str_replace(array('www.','last.fm/'),array('','ws.audioscrobbler.com/1.0/'),$url) . '/recenttracks.rss';
|
||||
|
@ -662,85 +646,34 @@ function probe_url($url, $mode = PROBE_NORMAL, $level = 1) {
|
|||
|
||||
if(x($feedret,'photo') && (! x($vcard,'photo')))
|
||||
$vcard['photo'] = $feedret['photo'];
|
||||
require_once('library/simplepie/simplepie.inc');
|
||||
$feed = new SimplePie();
|
||||
|
||||
$cookiejar = tempnam(get_temppath(), 'cookiejar-scrape-feed-');
|
||||
$xml = fetch_url($poll, false, $redirects, 0, Null, $cookiejar);
|
||||
unlink($cookiejar);
|
||||
|
||||
logger('probe_url: fetch feed: ' . $poll . ' returns: ' . $xml, LOGGER_DATA);
|
||||
$a = get_app();
|
||||
|
||||
logger('probe_url: scrape_feed: headers: ' . $a->get_curl_headers(), LOGGER_DATA);
|
||||
|
||||
// Don't try and parse an empty string
|
||||
$feed->set_raw_data(($xml) ? $xml : '<?xml version="1.0" encoding="utf-8" ?><xml></xml>');
|
||||
|
||||
$feed->init();
|
||||
if($feed->error()) {
|
||||
logger('probe_url: scrape_feed: Error parsing XML: ' . $feed->error());
|
||||
if ($xml == "") {
|
||||
logger("scrape_feed: XML is empty for feed ".$poll);
|
||||
$network = NETWORK_PHANTOM;
|
||||
}
|
||||
} else {
|
||||
$data = feed_import($xml,$dummy1,$dummy2, $dummy3, true);
|
||||
|
||||
if(! x($vcard,'photo'))
|
||||
$vcard['photo'] = $feed->get_image_url();
|
||||
$author = $feed->get_author();
|
||||
if (!is_array($data)) {
|
||||
logger("scrape_feed: This doesn't seem to be a feed: ".$poll);
|
||||
$network = NETWORK_PHANTOM;
|
||||
} else {
|
||||
if (($vcard["photo"] == "") AND ($data["header"]["author-avatar"] != ""))
|
||||
$vcard["photo"] = $data["header"]["author-avatar"];
|
||||
|
||||
if($author) {
|
||||
$vcard['fn'] = unxmlify(trim($author->get_name()));
|
||||
if(! $vcard['fn'])
|
||||
$vcard['fn'] = trim(unxmlify($author->get_email()));
|
||||
if(strpos($vcard['fn'],'@') !== false)
|
||||
$vcard['fn'] = substr($vcard['fn'],0,strpos($vcard['fn'],'@'));
|
||||
if (($vcard["fn"] == "") AND ($data["header"]["author-name"] != ""))
|
||||
$vcard["fn"] = $data["header"]["author-name"];
|
||||
|
||||
$email = unxmlify($author->get_email());
|
||||
if(! $profile && $author->get_link())
|
||||
$profile = trim(unxmlify($author->get_link()));
|
||||
if(! $vcard['photo']) {
|
||||
$rawtags = $feed->get_feed_tags( SIMPLEPIE_NAMESPACE_ATOM_10, 'author');
|
||||
if($rawtags) {
|
||||
$elems = $rawtags[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_10];
|
||||
if((x($elems,'link')) && ($elems['link'][0]['attribs']['']['rel'] === 'photo'))
|
||||
$vcard['photo'] = $elems['link'][0]['attribs']['']['href'];
|
||||
}
|
||||
}
|
||||
// Fetch fullname via poco:displayName
|
||||
$pocotags = $feed->get_feed_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'author');
|
||||
if ($pocotags) {
|
||||
$elems = $pocotags[0]['child']['http://portablecontacts.net/spec/1.0'];
|
||||
if (isset($elems["displayName"]))
|
||||
$vcard['fn'] = $elems["displayName"][0]["data"];
|
||||
if (isset($elems["preferredUsername"]))
|
||||
$vcard['nick'] = $elems["preferredUsername"][0]["data"];
|
||||
}
|
||||
}
|
||||
else {
|
||||
$item = $feed->get_item(0);
|
||||
if($item) {
|
||||
$author = $item->get_author();
|
||||
if($author) {
|
||||
$vcard['fn'] = trim(unxmlify($author->get_name()));
|
||||
if(! $vcard['fn'])
|
||||
$vcard['fn'] = trim(unxmlify($author->get_email()));
|
||||
if(strpos($vcard['fn'],'@') !== false)
|
||||
$vcard['fn'] = substr($vcard['fn'],0,strpos($vcard['fn'],'@'));
|
||||
$email = unxmlify($author->get_email());
|
||||
if(! $profile && $author->get_link())
|
||||
$profile = trim(unxmlify($author->get_link()));
|
||||
}
|
||||
if(! $vcard['photo']) {
|
||||
$rawmedia = $item->get_item_tags('http://search.yahoo.com/mrss/','thumbnail');
|
||||
if($rawmedia && $rawmedia[0]['attribs']['']['url'])
|
||||
$vcard['photo'] = unxmlify($rawmedia[0]['attribs']['']['url']);
|
||||
}
|
||||
if(! $vcard['photo']) {
|
||||
$rawtags = $item->get_item_tags( SIMPLEPIE_NAMESPACE_ATOM_10, 'author');
|
||||
if($rawtags) {
|
||||
$elems = $rawtags[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_10];
|
||||
if((x($elems,'link')) && ($elems['link'][0]['attribs']['']['rel'] === 'photo'))
|
||||
$vcard['photo'] = $elems['link'][0]['attribs']['']['href'];
|
||||
}
|
||||
}
|
||||
if (($vcard["nick"] == "") AND ($data["header"]["author-nick"] != ""))
|
||||
$vcard["nick"] = $data["header"]["author-nick"];
|
||||
|
||||
if(!$profile AND ($data["header"]["author-link"] != "") AND !in_array($network, array("", NETWORK_FEED)))
|
||||
$profile = $data["header"]["author-link"];
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -783,27 +716,9 @@ function probe_url($url, $mode = PROBE_NORMAL, $level = 1) {
|
|||
}
|
||||
}
|
||||
|
||||
if((! $vcard['photo']) && strlen($email))
|
||||
$vcard['photo'] = avatar_img($email);
|
||||
if($poll === $profile)
|
||||
$lnk = $feed->get_permalink();
|
||||
if(isset($lnk) && strlen($lnk))
|
||||
$profile = $lnk;
|
||||
|
||||
if(! $network) {
|
||||
if(! $network)
|
||||
$network = NETWORK_FEED;
|
||||
// If it is a feed, don't take the author name as feed name
|
||||
unset($vcard['fn']);
|
||||
}
|
||||
if(! (x($vcard,'fn')))
|
||||
$vcard['fn'] = notags($feed->get_title());
|
||||
if(! (x($vcard,'fn')))
|
||||
$vcard['fn'] = notags($feed->get_description());
|
||||
|
||||
if(strpos($vcard['fn'],'Twitter / ') !== false) {
|
||||
$vcard['fn'] = substr($vcard['fn'],strpos($vcard['fn'],'/')+1);
|
||||
$vcard['fn'] = trim($vcard['fn']);
|
||||
}
|
||||
if(! x($vcard,'nick')) {
|
||||
$vcard['nick'] = strtolower(notags(unxmlify($vcard['fn'])));
|
||||
if(strpos($vcard['nick'],' '))
|
||||
|
@ -816,7 +731,7 @@ function probe_url($url, $mode = PROBE_NORMAL, $level = 1) {
|
|||
|
||||
if(! x($vcard,'photo')) {
|
||||
$a = get_app();
|
||||
$vcard['photo'] = $a->get_baseurl() . '/images/person-175.jpg' ;
|
||||
$vcard['photo'] = App::get_baseurl() . '/images/person-175.jpg' ;
|
||||
}
|
||||
|
||||
if(! $profile)
|
||||
|
|
|
@ -14,12 +14,13 @@ function feed_import($xml,$importer,&$contact, &$hub, $simulate = false) {
|
|||
$doc = new DOMDocument();
|
||||
@$doc->loadXML($xml);
|
||||
$xpath = new DomXPath($doc);
|
||||
$xpath->registerNamespace('atom', "http://www.w3.org/2005/Atom");
|
||||
$xpath->registerNamespace('atom', NAMESPACE_ATOM1);
|
||||
$xpath->registerNamespace('dc', "http://purl.org/dc/elements/1.1/");
|
||||
$xpath->registerNamespace('content', "http://purl.org/rss/1.0/modules/content/");
|
||||
$xpath->registerNamespace('rdf', "http://www.w3.org/1999/02/22-rdf-syntax-ns#");
|
||||
$xpath->registerNamespace('rss', "http://purl.org/rss/1.0/");
|
||||
$xpath->registerNamespace('media', "http://search.yahoo.com/mrss/");
|
||||
$xpath->registerNamespace('poco', NAMESPACE_POCO);
|
||||
|
||||
$author = array();
|
||||
|
||||
|
@ -36,22 +37,23 @@ function feed_import($xml,$importer,&$contact, &$hub, $simulate = false) {
|
|||
|
||||
// Is it Atom?
|
||||
if ($xpath->query('/atom:feed/atom:entry')->length > 0) {
|
||||
$self = $xpath->query("atom:link[@rel='self']")->item(0)->attributes;
|
||||
if (is_object($self))
|
||||
foreach($self AS $attributes)
|
||||
$alternate = $xpath->query("atom:link[@rel='alternate']")->item(0)->attributes;
|
||||
if (is_object($alternate))
|
||||
foreach($alternate AS $attributes)
|
||||
if ($attributes->name == "href")
|
||||
$author["author-link"] = $attributes->textContent;
|
||||
|
||||
if ($author["author-link"] == "")
|
||||
$author["author-link"] = $xpath->evaluate('/atom:feed/atom:author/atom:uri/text()')->item(0)->nodeValue;
|
||||
|
||||
if ($author["author-link"] == "") {
|
||||
$alternate = $xpath->query("atom:link[@rel='alternate']")->item(0)->attributes;
|
||||
if (is_object($alternate))
|
||||
foreach($alternate AS $attributes)
|
||||
$self = $xpath->query("atom:link[@rel='self']")->item(0)->attributes;
|
||||
if (is_object($self))
|
||||
foreach($self AS $attributes)
|
||||
if ($attributes->name == "href")
|
||||
$author["author-link"] = $attributes->textContent;
|
||||
}
|
||||
|
||||
if ($author["author-link"] == "")
|
||||
$author["author-link"] = $xpath->evaluate('/atom:feed/atom:author/atom:uri/text()')->item(0)->nodeValue;
|
||||
if ($author["author-link"] == "")
|
||||
$author["author-link"] = $xpath->evaluate('/atom:feed/atom:id/text()')->item(0)->nodeValue;
|
||||
|
||||
|
@ -65,6 +67,14 @@ function feed_import($xml,$importer,&$contact, &$hub, $simulate = false) {
|
|||
if ($author["author-name"] == "")
|
||||
$author["author-name"] = $xpath->evaluate('/atom:feed/atom:author/atom:name/text()')->item(0)->nodeValue;
|
||||
|
||||
$value = $xpath->evaluate('atom:author/poco:displayName/text()')->item(0)->nodeValue;
|
||||
if ($value != "")
|
||||
$author["author-name"] = $value;
|
||||
|
||||
$value = $xpath->evaluate('atom:author/poco:preferredUsername/text()')->item(0)->nodeValue;
|
||||
if ($value != "")
|
||||
$author["author-nick"] = $value;
|
||||
|
||||
$author["edited"] = $author["created"] = $xpath->query('/atom:feed/atom:updated/text()')->item(0)->nodeValue;
|
||||
|
||||
$author["app"] = $xpath->evaluate('/atom:feed/atom:generator/text()')->item(0)->nodeValue;
|
||||
|
|
|
@ -1,26 +0,0 @@
|
|||
Copyright (c) 2004-2007, Ryan Parman and Geoffrey Sneddon.
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without modification, are
|
||||
permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice, this list of
|
||||
conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright notice, this list
|
||||
of conditions and the following disclaimer in the documentation and/or other materials
|
||||
provided with the distribution.
|
||||
|
||||
* Neither the name of the SimplePie Team nor the names of its contributors may be used
|
||||
to endorse or promote products derived from this software without specific prior
|
||||
written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
|
||||
OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
|
||||
AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||
OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGE.
|
|
@ -1,53 +0,0 @@
|
|||
# SimplePie
|
||||
|
||||
## Authors and contributors
|
||||
|
||||
* [Ryan Parman](http://ryanparman.com)
|
||||
* [Geoffrey Sneddon](http://gsnedders.com)
|
||||
* [Ryan McCue](http://ryanmccue.info)
|
||||
* [Michael Shipley](http://michaelpshipley.com)
|
||||
* [Steve Minutillo](http://minutillo.com/steve/)
|
||||
|
||||
|
||||
## License
|
||||
|
||||
[New BSD license](http://www.opensource.org/licenses/bsd-license.php)
|
||||
|
||||
|
||||
## Project status
|
||||
|
||||
SimplePie is currently maintained by Ryan McCue.
|
||||
|
||||
At the moment, there isn't a lot of active development happening. If the community decides that SimplePie is a valuable tool, then the community will come together to maintain it into the future.
|
||||
|
||||
If you're interested in getting involved with SimplePie, please get in touch with Ryan McCue.
|
||||
|
||||
|
||||
## What comes in the package?
|
||||
|
||||
1. `simplepie.inc` - The SimplePie library. This is all that's required for your pages.
|
||||
2. `README.markdown` - This document.
|
||||
3. `LICENSE.txt` - A copy of the BSD license.
|
||||
4. `compatibility_test/` - The SimplePie compatibility test that checks your server for required settings.
|
||||
5. `demo/` - A basic feed reader demo that shows off some of SimplePie's more noticable features.
|
||||
6. `idn/` - A third-party library that SimplePie can optionally use to understand Internationalized Domain Names (IDNs).
|
||||
7. `test/` - SimplePie's unit test suite.
|
||||
|
||||
|
||||
## To start the demo
|
||||
|
||||
1. Upload this package to your webserver.
|
||||
2. Make sure that the cache folder inside of the demo folder is server-writable.
|
||||
3. Navigate your browser to the demo folder.
|
||||
|
||||
|
||||
## Need support?
|
||||
|
||||
For further setup and install documentation, function references, etc., visit:
|
||||
[http://simplepie.org/wiki/](http://simplepie.org/wiki/)
|
||||
|
||||
For bug reports and feature requests, visit:
|
||||
[http://github.com/rmccue/simplepie/issues](http://github.com/rmccue/simplepie/issues)
|
||||
|
||||
Support mailing list -- powered by users, for users.
|
||||
[http://tech.groups.yahoo.com/group/simplepie-support/](http://tech.groups.yahoo.com/group/simplepie-support/)
|
|
@ -1,7 +0,0 @@
|
|||
SIMPLEPIE COMPATIBILITY TEST
|
||||
|
||||
1) Upload sp_compatibility_test.php to the web-accessible root of your website.
|
||||
For example, if your website is www.example.com, upload it so that you can get
|
||||
to it at www.example.com/sp_compatibility_test.php
|
||||
|
||||
2) Open your web browser and go to the page you just uploaded.
|
|
@ -1,178 +0,0 @@
|
|||
<?php
|
||||
|
||||
require_once 'simplepie.inc';
|
||||
|
||||
function normalize_character_set($charset)
|
||||
{
|
||||
return strtolower(preg_replace('/(?:[^a-zA-Z0-9]+|([^0-9])0+)/', '\1', $charset));
|
||||
}
|
||||
|
||||
function build_character_set_list()
|
||||
{
|
||||
$file = new SimplePie_File('http://www.iana.org/assignments/character-sets');
|
||||
if (!$file->success && !($file->method & SIMPLEPIE_FILE_SOURCE_REMOTE === 0 || ($file->status_code === 200 || $file->status_code > 206 && $file->status_code < 300)))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
$data = explode("\n", $file->body);
|
||||
unset($file);
|
||||
|
||||
foreach ($data as $line)
|
||||
{
|
||||
// New character set
|
||||
if (substr($line, 0, 5) === 'Name:')
|
||||
{
|
||||
// If we already have one, push it on to the array
|
||||
if (isset($aliases))
|
||||
{
|
||||
for ($i = 0, $count = count($aliases); $i < $count; $i++)
|
||||
{
|
||||
$aliases[$i] = normalize_character_set($aliases[$i]);
|
||||
}
|
||||
$charsets[$preferred] = array_unique($aliases);
|
||||
natsort($charsets[$preferred]);
|
||||
}
|
||||
|
||||
$start = 5 + strspn($line, "\x09\x0A\x0B\xC\x0D\x20", 5);
|
||||
$chars = strcspn($line, "\x09\x0A\x0B\xC\x0D\x20", $start);
|
||||
$aliases = array(substr($line, $start, $chars));
|
||||
$preferred = end($aliases);
|
||||
}
|
||||
// Another alias
|
||||
elseif(substr($line, 0, 6) === 'Alias:')
|
||||
{
|
||||
$start = 7 + strspn($line, "\x09\x0A\x0B\xC\x0D\x20", 7);
|
||||
$chars = strcspn($line, "\x09\x0A\x0B\xC\x0D\x20", $start);
|
||||
$aliases[] = substr($line, $start, $chars);
|
||||
|
||||
if (end($aliases) === 'None')
|
||||
{
|
||||
array_pop($aliases);
|
||||
}
|
||||
elseif (substr($line, 7 + $chars + 1, 21) === '(preferred MIME name)')
|
||||
{
|
||||
$preferred = end($aliases);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Compatibility replacements
|
||||
$compat = array(
|
||||
'EUC-KR' => 'windows-949',
|
||||
'GB2312' => 'GBK',
|
||||
'GB_2312-80' => 'GBK',
|
||||
'ISO-8859-1' => 'windows-1252',
|
||||
'ISO-8859-9' => 'windows-1254',
|
||||
'ISO-8859-11' => 'windows-874',
|
||||
'KS_C_5601-1987' => 'windows-949',
|
||||
'TIS-620' => 'windows-874',
|
||||
//'US-ASCII' => 'windows-1252',
|
||||
'x-x-big5' => 'Big5',
|
||||
);
|
||||
|
||||
foreach ($compat as $real => $replace)
|
||||
{
|
||||
if (isset($charsets[$real]) && isset($charsets[$replace]))
|
||||
{
|
||||
$charsets[$replace] = array_merge($charsets[$replace], $charsets[$real]);
|
||||
unset($charsets[$real]);
|
||||
}
|
||||
elseif (isset($charsets[$real]))
|
||||
{
|
||||
$charsets[$replace] = $charsets[$real];
|
||||
$charsets[$replace][] = normalize_character_set($replace);
|
||||
unset($charsets[$real]);
|
||||
}
|
||||
else
|
||||
{
|
||||
$charsets[$replace][] = normalize_character_set($real);
|
||||
}
|
||||
$charsets[$replace] = array_unique($charsets[$replace]);
|
||||
natsort($charsets[$replace]);
|
||||
}
|
||||
|
||||
// Sort it
|
||||
uksort($charsets, 'strnatcasecmp');
|
||||
|
||||
// Check that nothing matches more than one
|
||||
$all = call_user_func_array('array_merge', $charsets);
|
||||
$all_count = array_count_values($all);
|
||||
if (max($all_count) > 1)
|
||||
{
|
||||
echo "Duplicated charsets:\n";
|
||||
foreach ($all_count as $charset => $count)
|
||||
{
|
||||
if ($count > 1)
|
||||
{
|
||||
echo "$charset\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// And we're done!
|
||||
return $charsets;
|
||||
}
|
||||
}
|
||||
|
||||
function charset($charset)
|
||||
{
|
||||
$normalized_charset = normalize_character_set($charset);
|
||||
if ($charsets = build_character_set_list())
|
||||
{
|
||||
foreach ($charsets as $preferred => $aliases)
|
||||
{
|
||||
if (in_array($normalized_charset, $aliases))
|
||||
{
|
||||
return $preferred;
|
||||
}
|
||||
}
|
||||
return $charset;
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
function build_function()
|
||||
{
|
||||
if ($charsets = build_character_set_list())
|
||||
{
|
||||
$return = <<<EOF
|
||||
function charset(\$charset)
|
||||
{
|
||||
// Normalization from UTS #22
|
||||
switch (strtolower(preg_replace('/(?:[^a-zA-Z0-9]+|([^0-9])0+)/', '\\1', \$charset)))
|
||||
{
|
||||
|
||||
EOF;
|
||||
foreach ($charsets as $preferred => $aliases)
|
||||
{
|
||||
foreach ($aliases as $alias)
|
||||
{
|
||||
$return .= "\t\tcase " . var_export($alias, true) . ":\n";
|
||||
}
|
||||
$return .= "\t\t\treturn " . var_export($preferred, true) . ";\n\n";
|
||||
}
|
||||
$return .= <<<EOF
|
||||
default:
|
||||
return \$charset;
|
||||
}
|
||||
}
|
||||
EOF;
|
||||
return $return;
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (php_sapi_name() === 'cli' && realpath($_SERVER['argv'][0]) === __FILE__)
|
||||
{
|
||||
echo build_function();
|
||||
}
|
||||
|
||||
?>
|
|
@ -1,38 +0,0 @@
|
|||
/* SQLite */
|
||||
CREATE TABLE cache_data (
|
||||
id TEXT NOT NULL,
|
||||
items SMALLINT NOT NULL DEFAULT 0,
|
||||
data BLOB NOT NULL,
|
||||
mtime INTEGER UNSIGNED NOT NULL
|
||||
);
|
||||
CREATE UNIQUE INDEX id ON cache_data(id);
|
||||
|
||||
CREATE TABLE items (
|
||||
feed_id TEXT NOT NULL,
|
||||
id TEXT NOT NULL,
|
||||
data TEXT NOT NULL,
|
||||
posted INTEGER UNSIGNED NOT NULL
|
||||
);
|
||||
CREATE INDEX feed_id ON items(feed_id);
|
||||
|
||||
|
||||
/* MySQL */
|
||||
CREATE TABLE `cache_data` (
|
||||
`id` TEXT CHARACTER SET utf8 NOT NULL,
|
||||
`items` SMALLINT NOT NULL DEFAULT 0,
|
||||
`data` BLOB NOT NULL,
|
||||
`mtime` INT UNSIGNED NOT NULL,
|
||||
UNIQUE (
|
||||
`id`(125)
|
||||
)
|
||||
);
|
||||
|
||||
CREATE TABLE `items` (
|
||||
`feed_id` TEXT CHARACTER SET utf8 NOT NULL,
|
||||
`id` TEXT CHARACTER SET utf8 NOT NULL,
|
||||
`data` TEXT CHARACTER SET utf8 NOT NULL,
|
||||
`posted` INT UNSIGNED NOT NULL,
|
||||
INDEX `feed_id` (
|
||||
`feed_id`(125)
|
||||
)
|
||||
);
|
|
@ -1,23 +0,0 @@
|
|||
#!/usr/bin/php
|
||||
<?php
|
||||
include_once('../simplepie.inc');
|
||||
|
||||
// Parse it
|
||||
$feed = new SimplePie();
|
||||
if (isset($argv[1]) && $argv[1] !== '')
|
||||
{
|
||||
$feed->set_feed_url($argv[1]);
|
||||
$feed->enable_cache(false);
|
||||
$feed->init();
|
||||
}
|
||||
|
||||
$items = $feed->get_items();
|
||||
|
||||
foreach ($items as $item)
|
||||
{
|
||||
echo $item->get_title() . "\n";
|
||||
}
|
||||
|
||||
var_dump($feed->get_item_quantity());
|
||||
|
||||
?>
|
Before Width: | Height: | Size: 28 KiB |
Before Width: | Height: | Size: 27 KiB |
Before Width: | Height: | Size: 533 B |
Before Width: | Height: | Size: 533 B |
Before Width: | Height: | Size: 250 B |
Before Width: | Height: | Size: 28 KiB |
Before Width: | Height: | Size: 4.3 KiB |
Before Width: | Height: | Size: 3.7 KiB |
Before Width: | Height: | Size: 3.7 KiB |
Before Width: | Height: | Size: 3.9 KiB |
Before Width: | Height: | Size: 4.5 KiB |
Before Width: | Height: | Size: 3.9 KiB |
Before Width: | Height: | Size: 3.7 KiB |
Before Width: | Height: | Size: 4.1 KiB |
Before Width: | Height: | Size: 4 KiB |
Before Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 3.9 KiB |
Before Width: | Height: | Size: 4 KiB |
Before Width: | Height: | Size: 3.9 KiB |
Before Width: | Height: | Size: 715 B |
Before Width: | Height: | Size: 3 KiB |
|
@ -1,5 +0,0 @@
|
|||
<html>
|
||||
<head>
|
||||
<meta http-equiv="refresh" content="0;url=http://www.jeroenwijering.com/extras/readme.html">
|
||||
</head>
|
||||
</html>
|
Before Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 851 B |
Before Width: | Height: | Size: 36 KiB |
|
@ -1,35 +0,0 @@
|
|||
/*=:project
|
||||
scalable Inman Flash Replacement (sIFR) version 3.
|
||||
|
||||
=:file
|
||||
Copyright: 2006 Mark Wubben.
|
||||
Author: Mark Wubben, <http://novemberborn.net/>
|
||||
|
||||
=:history
|
||||
* IFR: Shaun Inman
|
||||
* sIFR 1: Mike Davidson, Shaun Inman and Tomas Jogin
|
||||
* sIFR 2: Mike Davidson, Shaun Inman, Tomas Jogin and Mark Wubben
|
||||
|
||||
=:license
|
||||
This software is licensed and provided under the CC-GNU LGPL.
|
||||
See <http://creativecommons.org/licenses/LGPL/2.1/>
|
||||
*/
|
||||
|
||||
|
||||
/* This is the print stylesheet to hide the Flash headlines from the browser... regular browser text headlines will now print as normal */
|
||||
|
||||
.sIFR-flash {
|
||||
display: none !important;
|
||||
height: 0;
|
||||
width: 0;
|
||||
position: absolute;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.sIFR-alternate {
|
||||
visibility: visible !important;
|
||||
display: block !important;
|
||||
position: static !important;
|
||||
left: auto !important;
|
||||
top: auto !important;
|
||||
}
|
|
@ -1,39 +0,0 @@
|
|||
/*=:project
|
||||
scalable Inman Flash Replacement (sIFR) version 3.
|
||||
|
||||
=:file
|
||||
Copyright: 2006 Mark Wubben.
|
||||
Author: Mark Wubben, <http://novemberborn.net/>
|
||||
|
||||
=:history
|
||||
* IFR: Shaun Inman
|
||||
* sIFR 1: Mike Davidson, Shaun Inman and Tomas Jogin
|
||||
* sIFR 2: Mike Davidson, Shaun Inman, Tomas Jogin and Mark Wubben
|
||||
|
||||
=:license
|
||||
This software is licensed and provided under the CC-GNU LGPL.
|
||||
See <http://creativecommons.org/licenses/LGPL/2.1/>
|
||||
*/
|
||||
|
||||
/*---- sIFR ---*/
|
||||
.sIFR-flash {
|
||||
visibility: visible !important;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.sIFR-replaced {
|
||||
visibility: visible !important;
|
||||
}
|
||||
|
||||
.sIFR-alternate {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
width: 0;
|
||||
height: 0;
|
||||
display: block;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
/*---- Header styling ---*/
|
|
@ -1,40 +0,0 @@
|
|||
var yanone_kaffeesatz = {
|
||||
src: './for_the_demo/yanone-kaffeesatz-bold.swf'
|
||||
};
|
||||
|
||||
var lucida_grande = {
|
||||
src: './for_the_demo/lucida-grande-bold.swf'
|
||||
};
|
||||
|
||||
sIFR.activate(yanone_kaffeesatz);
|
||||
//sIFR.activate(lucida_grande);
|
||||
|
||||
sIFR.replace(yanone_kaffeesatz, {
|
||||
//sIFR.replace(lucida_grande, {
|
||||
|
||||
selector: 'h3.header',
|
||||
wmode: 'transparent',
|
||||
css: {
|
||||
'.sIFR-root': {
|
||||
'text-align': 'center',
|
||||
'color': '#000000',
|
||||
'font-weight': 'bold',
|
||||
'background-color': '#EEFFEE',
|
||||
|
||||
'font-size': '50px', // For Yanone Kaffeesatz
|
||||
//'font-size': '40px', // For Lucida Grande
|
||||
|
||||
'letter-spacing': '0' // For Yanone Kaffeesatz
|
||||
//'letter-spacing': '-4' // For Lucida Grande
|
||||
|
||||
},
|
||||
'a': {
|
||||
'text-decoration': 'none',
|
||||
'color': '#000000'
|
||||
},
|
||||
'a:hover': {
|
||||
'text-decoration': 'none',
|
||||
'color': '#666666'
|
||||
}
|
||||
}
|
||||
});
|
|
@ -1,397 +0,0 @@
|
|||
/*
|
||||
Theme Name: SimplePie
|
||||
Theme URI: http://simplepie.org
|
||||
Description: A simple, yet beautiful theme inspired by several cleanly designed websites.
|
||||
Version: 1.4
|
||||
Author: Ryan Parman
|
||||
Author URI: http://skyzyx.com
|
||||
Updated: 21 June 2007
|
||||
*/
|
||||
|
||||
|
||||
/*********************************************
|
||||
HYPERLINK STYLES
|
||||
*********************************************/
|
||||
a {
|
||||
color:#369;
|
||||
text-decoration:underline;
|
||||
padding:0 1px;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
color:#fff !important;
|
||||
background-color:#333;
|
||||
text-decoration:none;
|
||||
padding:0 1px;
|
||||
}
|
||||
|
||||
a.nohover {
|
||||
text-decoration:none;
|
||||
border:none;
|
||||
}
|
||||
|
||||
a.nohover:hover {
|
||||
background-color:transparent;
|
||||
border:none;
|
||||
}
|
||||
|
||||
a.namelink {
|
||||
padding:0;
|
||||
margin:0;
|
||||
overflow:hidden;
|
||||
height:1px;
|
||||
}
|
||||
|
||||
h4 a,
|
||||
.sample_feeds a {
|
||||
color:#000;
|
||||
}
|
||||
|
||||
|
||||
/*********************************************
|
||||
GENERAL STYLES
|
||||
*********************************************/
|
||||
body {
|
||||
/*font:12px/18px Verdana, sans-serif;*/
|
||||
font:14px/1.5em "Lucida Grande", Tahoma, sans-serif;
|
||||
letter-spacing:0px;
|
||||
color:#333;
|
||||
background-color:#fff;
|
||||
margin:0;
|
||||
padding:0;
|
||||
}
|
||||
|
||||
div#site {
|
||||
width:600px;
|
||||
margin:50px auto 0 auto;
|
||||
}
|
||||
|
||||
h1#logo {
|
||||
margin:0;
|
||||
padding:0;
|
||||
text-align:center;
|
||||
}
|
||||
|
||||
h1#logo a,
|
||||
h1#logo a:hover {
|
||||
background-color:transparent;
|
||||
text-decoration:none;
|
||||
padding:0;
|
||||
}
|
||||
|
||||
h2.image {
|
||||
margin:0;
|
||||
padding:0;
|
||||
text-align:center;
|
||||
}
|
||||
|
||||
h3 {
|
||||
margin:20px 0 0 0;
|
||||
padding:0;
|
||||
font-size:1.5em;
|
||||
}
|
||||
|
||||
h4 {
|
||||
margin:20px 0 0 0;
|
||||
padding:0;
|
||||
font-size:1.2em;
|
||||
letter-spacing:-1px;
|
||||
}
|
||||
|
||||
h5 {
|
||||
margin:10px 0 0 0;
|
||||
padding:0;
|
||||
font-size:1em;
|
||||
font-weight:bold;
|
||||
}
|
||||
|
||||
em {
|
||||
font-style:normal;
|
||||
background-color:#ffc;
|
||||
}
|
||||
|
||||
p {
|
||||
margin:0;
|
||||
padding:5px 0;
|
||||
}
|
||||
|
||||
ul, ol {
|
||||
margin:10px 0 10px 20px;
|
||||
padding:0 0 0 15px;
|
||||
}
|
||||
|
||||
ul li, ol li {
|
||||
margin:0 0 7px 0;
|
||||
padding:0 0 0 3px;
|
||||
}
|
||||
|
||||
form {
|
||||
margin:0;
|
||||
padding:0;
|
||||
}
|
||||
|
||||
code {
|
||||
font-size:1em;
|
||||
background-color:#f3f3ff;
|
||||
color:#000;
|
||||
}
|
||||
|
||||
div#site pre {
|
||||
background-color:#f3f3ff;
|
||||
color:#000080;
|
||||
border:1px dotted #000080;
|
||||
overflow:auto;
|
||||
padding:3px 5px;
|
||||
}
|
||||
|
||||
blockquote {
|
||||
font-size:1em;
|
||||
color:#666;
|
||||
border-left:4px solid #666;
|
||||
margin:10px 0 10px 30px;
|
||||
padding:0 5px 0 10px;
|
||||
background:#f3f3f3 url(background_blockquote.png) repeat top left;
|
||||
}
|
||||
|
||||
input, select, textarea {
|
||||
font-size:12px;
|
||||
line-height:1.2em;
|
||||
padding:2px;
|
||||
}
|
||||
|
||||
input[type=text], select, textarea {
|
||||
background-color:#e9f5ff;
|
||||
border:1px solid #333;
|
||||
}
|
||||
|
||||
input[type=text]:focus, select:focus, textarea:focus {
|
||||
background-color:#ffe;
|
||||
}
|
||||
|
||||
.clearLeft {clear:left;}
|
||||
.clearRight {clear:right;}
|
||||
.clearBoth {clear:both;}
|
||||
.hide {display:none;}
|
||||
|
||||
|
||||
/*********************************************
|
||||
NAVIGATION STYLES
|
||||
*********************************************/
|
||||
div#header {
|
||||
background:#fff url(top_gradient.gif) repeat-x top left;
|
||||
margin:0;
|
||||
padding:0;
|
||||
}
|
||||
|
||||
div#header form {
|
||||
margin:0;
|
||||
padding:0;
|
||||
}
|
||||
|
||||
div#header div#headerInner {
|
||||
margin:0;
|
||||
padding:0;
|
||||
}
|
||||
|
||||
div#header div#headerInner div#logoContainer {}
|
||||
|
||||
div#header div#headerInner div#logoContainerInner {
|
||||
width:550px;
|
||||
margin:0 auto;
|
||||
padding:20px;
|
||||
}
|
||||
|
||||
div#header div#headerInner div#logoContainer div#logo {
|
||||
float:left;
|
||||
width:200px;
|
||||
}
|
||||
|
||||
div#header div#headerInner div#logoContainer div#logo a,
|
||||
div#header div#headerInner div#logoContainer div#logo a:hover {
|
||||
border:none;
|
||||
background:none;
|
||||
}
|
||||
|
||||
div#header div#headerInner div#logoContainer div#feed {
|
||||
float:right;
|
||||
width:300px;
|
||||
text-align:right;
|
||||
padding:10px 0 0 0;
|
||||
}
|
||||
|
||||
div#header div#headerInner div#logoContainer div#feed input.text {
|
||||
width:60%;
|
||||
}
|
||||
|
||||
div#header div#headerInner div#menu {
|
||||
background:#eee url(background_menuitem_shadow.gif) repeat-x top left;
|
||||
border-top:2px solid #ccc;
|
||||
border-bottom:1px solid #ddd;
|
||||
text-align:center;
|
||||
}
|
||||
|
||||
div#header div#headerInner div#menu table {
|
||||
width:auto;
|
||||
margin:0 auto;
|
||||
}
|
||||
|
||||
div#header div#headerInner div#menu ul {
|
||||
display:block;
|
||||
width:100%;
|
||||
margin:0 auto;
|
||||
padding:0;
|
||||
font-size:12px;
|
||||
}
|
||||
|
||||
div#header div#headerInner div#menu ul li {
|
||||
display:block;
|
||||
float:left;
|
||||
}
|
||||
|
||||
div#header div#headerInner div#menu ul li a {
|
||||
display:block;
|
||||
margin:-2px 0 0 0;
|
||||
padding:5px 7px 8px 7px;
|
||||
text-decoration:none;
|
||||
color:#666 !important;
|
||||
background-color:transparent;
|
||||
}
|
||||
|
||||
div#header div#headerInner div#menu ul li a:hover {
|
||||
display:block;
|
||||
margin:-2px 0 0 0;
|
||||
padding:5px 7px 8px 7px;
|
||||
text-decoration:none;
|
||||
color:#666;
|
||||
background:#fff url(background_menuitem_off.gif) no-repeat bottom right;
|
||||
}
|
||||
|
||||
body#bodydemo div#header div#headerInner div#menu ul li#demo a {
|
||||
display:block;
|
||||
margin:-2px 0 0 0;
|
||||
padding:5px 7px 8px 7px;
|
||||
text-decoration:none;
|
||||
color:#333;
|
||||
font-weight:bold;
|
||||
background:#fff url(background_menuitem.gif) no-repeat bottom right;
|
||||
}
|
||||
|
||||
|
||||
/*********************************************
|
||||
CONTENT STYLES
|
||||
*********************************************/
|
||||
div.chunk {
|
||||
margin:20px 0 0 0;
|
||||
padding:0 0 10px 0;
|
||||
border-bottom:1px solid #ccc;
|
||||
}
|
||||
|
||||
div.topchunk {
|
||||
margin:0 !important;
|
||||
}
|
||||
|
||||
.footnote,
|
||||
.footnote a {
|
||||
font-size:12px;
|
||||
line-height:1.3em;
|
||||
color:#aaa;
|
||||
}
|
||||
|
||||
.footnote em {
|
||||
background-color:transparent;
|
||||
font-style:italic;
|
||||
}
|
||||
|
||||
.footnote code {
|
||||
background-color:transparent;
|
||||
font:11px/14px monospace;
|
||||
color:#aaa;
|
||||
}
|
||||
|
||||
p.subscribe {
|
||||
background-color:#f3f3f3;
|
||||
font-size:12px;
|
||||
text-align:center;
|
||||
}
|
||||
|
||||
p.highlight {
|
||||
background-color:#ffc;
|
||||
font-size:12px;
|
||||
text-align:center;
|
||||
}
|
||||
|
||||
p.sample_feeds {
|
||||
font-size:12px;
|
||||
line-height:1.2em;
|
||||
}
|
||||
|
||||
div.sp_errors {
|
||||
background-color:#eee;
|
||||
padding:5px;
|
||||
text-align:center;
|
||||
font-size:12px;
|
||||
}
|
||||
|
||||
.noborder {
|
||||
border:none !important;
|
||||
}
|
||||
|
||||
img.favicon {
|
||||
margin:0 4px -2px 0;
|
||||
width:16px;
|
||||
height:16px;
|
||||
}
|
||||
|
||||
p.favicons a,
|
||||
p.favicons a:hover {
|
||||
border:none;
|
||||
background-color:transparent;
|
||||
}
|
||||
|
||||
p.favicons img {
|
||||
border:none;
|
||||
}
|
||||
|
||||
|
||||
/*********************************************
|
||||
DEMO STYLES
|
||||
*********************************************/
|
||||
div#sp_input {
|
||||
background-color:#ffc;
|
||||
border:2px solid #f90;
|
||||
padding:5px;
|
||||
text-align:center;
|
||||
}
|
||||
|
||||
div#sp_input input.text {
|
||||
border:1px solid #999;
|
||||
background:#e9f5ff url(feed.png) no-repeat 4px 50%;
|
||||
width:75%;
|
||||
padding:2px 2px 2px 28px;
|
||||
font:18px/22px "Lucida Grande", Verdana, sans-serif;
|
||||
font-weight:bold;
|
||||
letter-spacing:-1px;
|
||||
}
|
||||
|
||||
form#sp_form {
|
||||
margin:15px 0;
|
||||
}
|
||||
|
||||
div.focus {
|
||||
margin:0;
|
||||
padding:10px 20px;
|
||||
background-color:#efe;
|
||||
}
|
||||
|
||||
p.sample_feeds {
|
||||
text-align:justify;
|
||||
}
|
||||
|
||||
|
||||
/*********************************************
|
||||
SIFR STYLES
|
||||
*********************************************/
|
||||
.sIFR-active h3.header {
|
||||
visibility:hidden;
|
||||
line-height:1em;
|
||||
}
|
|
@ -1,31 +0,0 @@
|
|||
/**********************************************************
|
||||
Sleight
|
||||
(c) 2001, Aaron Boodman
|
||||
http://www.youngpup.net
|
||||
**********************************************************/
|
||||
|
||||
if (navigator.platform == "Win32" && navigator.appName == "Microsoft Internet Explorer" && window.attachEvent)
|
||||
{
|
||||
document.writeln('<style type="text/css">img { visibility:hidden; } </style>');
|
||||
window.attachEvent("onload", fnLoadPngs);
|
||||
}
|
||||
|
||||
function fnLoadPngs()
|
||||
{
|
||||
var rslt = navigator.appVersion.match(/MSIE (\d+\.\d+)/, '');
|
||||
var itsAllGood = (rslt != null && Number(rslt[1]) >= 5.5);
|
||||
|
||||
for (var i = document.images.length - 1, img = null; (img = document.images[i]); i--)
|
||||
{
|
||||
if (itsAllGood && img.src.match(/\.png$/i) != null)
|
||||
{
|
||||
var src = img.src;
|
||||
var div = document.createElement("DIV");
|
||||
div.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + src + "', sizing='scale')"
|
||||
div.style.width = img.width + "px";
|
||||
div.style.height = img.height + "px";
|
||||
img.replaceNode(div);
|
||||
}
|
||||
img.style.visibility = "visible";
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 38 KiB |
Before Width: | Height: | Size: 113 KiB |
|
@ -1,71 +0,0 @@
|
|||
/*=:project
|
||||
scalable Inman Flash Replacement (sIFR) version 3.
|
||||
|
||||
=:file
|
||||