Browse Source

First commit

Sebastien SAUVAGE 10 years ago
commit
a6069c3e5b
3 changed files with 303 additions and 0 deletions
  1. 22 0
      .gitattributes
  2. 215 0
      .gitignore
  3. 66 0
      rss-bridge-flickr-explore.php

+ 22 - 0
.gitattributes

@@ -0,0 +1,22 @@
+# Auto detect text files and perform LF normalization
+* text=auto
+
+# Custom for Visual Studio
+*.cs     diff=csharp
+*.sln    merge=union
+*.csproj merge=union
+*.vbproj merge=union
+*.fsproj merge=union
+*.dbproj merge=union
+
+# Standard to msysgit
+*.doc	 diff=astextplain
+*.DOC	 diff=astextplain
+*.docx diff=astextplain
+*.DOCX diff=astextplain
+*.dot  diff=astextplain
+*.DOT  diff=astextplain
+*.pdf  diff=astextplain
+*.PDF	 diff=astextplain
+*.rtf	 diff=astextplain
+*.RTF	 diff=astextplain

+ 215 - 0
.gitignore

@@ -0,0 +1,215 @@
+#################
+## Eclipse
+#################
+
+*.pydevproject
+.project
+.metadata
+bin/
+tmp/
+*.tmp
+*.bak
+*.swp
+*~.nib
+local.properties
+.classpath
+.settings/
+.loadpath
+
+# External tool builders
+.externalToolBuilders/
+
+# Locally stored "Eclipse launch configurations"
+*.launch
+
+# CDT-specific
+.cproject
+
+# PDT-specific
+.buildpath
+
+
+#################
+## Visual Studio
+#################
+
+## Ignore Visual Studio temporary files, build results, and
+## files generated by popular Visual Studio add-ons.
+
+# User-specific files
+*.suo
+*.user
+*.sln.docstates
+
+# Build results
+
+[Dd]ebug/
+[Rr]elease/
+x64/
+build/
+[Bb]in/
+[Oo]bj/
+
+# MSTest test Results
+[Tt]est[Rr]esult*/
+[Bb]uild[Ll]og.*
+
+*_i.c
+*_p.c
+*.ilk
+*.meta
+*.obj
+*.pch
+*.pdb
+*.pgc
+*.pgd
+*.rsp
+*.sbr
+*.tlb
+*.tli
+*.tlh
+*.tmp
+*.tmp_proj
+*.log
+*.vspscc
+*.vssscc
+.builds
+*.pidb
+*.log
+*.scc
+
+# Visual C++ cache files
+ipch/
+*.aps
+*.ncb
+*.opensdf
+*.sdf
+*.cachefile
+
+# Visual Studio profiler
+*.psess
+*.vsp
+*.vspx
+
+# Guidance Automation Toolkit
+*.gpState
+
+# ReSharper is a .NET coding add-in
+_ReSharper*/
+*.[Rr]e[Ss]harper
+
+# TeamCity is a build add-in
+_TeamCity*
+
+# DotCover is a Code Coverage Tool
+*.dotCover
+
+# NCrunch
+*.ncrunch*
+.*crunch*.local.xml
+
+# Installshield output folder
+[Ee]xpress/
+
+# DocProject is a documentation generator add-in
+DocProject/buildhelp/
+DocProject/Help/*.HxT
+DocProject/Help/*.HxC
+DocProject/Help/*.hhc
+DocProject/Help/*.hhk
+DocProject/Help/*.hhp
+DocProject/Help/Html2
+DocProject/Help/html
+
+# Click-Once directory
+publish/
+
+# Publish Web Output
+*.Publish.xml
+*.pubxml
+
+# NuGet Packages Directory
+## TODO: If you have NuGet Package Restore enabled, uncomment the next line
+#packages/
+
+# Windows Azure Build Output
+csx
+*.build.csdef
+
+# Windows Store app package directory
+AppPackages/
+
+# Others
+sql/
+*.Cache
+ClientBin/
+[Ss]tyle[Cc]op.*
+~$*
+*~
+*.dbmdl
+*.[Pp]ublish.xml
+*.pfx
+*.publishsettings
+
+# RIA/Silverlight projects
+Generated_Code/
+
+# Backup & report files from converting an old project file to a newer
+# Visual Studio version. Backup files are not needed, because we have git ;-)
+_UpgradeReport_Files/
+Backup*/
+UpgradeLog*.XML
+UpgradeLog*.htm
+
+# SQL Server files
+App_Data/*.mdf
+App_Data/*.ldf
+
+#############
+## Windows detritus
+#############
+
+# Windows image file caches
+Thumbs.db
+ehthumbs.db
+
+# Folder config file
+Desktop.ini
+
+# Recycle Bin used on file shares
+$RECYCLE.BIN/
+
+# Mac crap
+.DS_Store
+
+
+#############
+## Python
+#############
+
+*.py[co]
+
+# Packages
+*.egg
+*.egg-info
+dist/
+build/
+eggs/
+parts/
+var/
+sdist/
+develop-eggs/
+.installed.cfg
+
+# Installer logs
+pip-log.txt
+
+# Unit test / coverage reports
+.coverage
+.tox
+
+#Translations
+*.mo
+
+#Mr Developer
+.mr.developer.cfg

+ 66 - 0
rss-bridge-flickr-explore.php

@@ -0,0 +1,66 @@
+<?php
+/* Flickr Explorer RSS bridge.
+   Returns a feed all new interesting images from http://www.flickr.com/explore
+   Licence: Public domain.
+   Returns ATOM feed by default.
+   Other available formats: ?format=plaintext and ?format=json
+*/
+ini_set('user_agent', 'Mozilla/5.0 (X11; Linux x86_64; rv:20.0) Gecko/20100101 Firefox/20.0');
+date_default_timezone_set('UTC');
+//ini_set('display_errors','1');
+//error_reporting(E_ALL);
+
+function returnError($code, $message) { header("HTTP/1.1 $code"); header('content-type: text/plain'); die($message); }
+
+if (!file_exists('simple_html_dom.php')) { returnError('404 Not Found', 'ERROR: "PHP Simple HTML DOM Parser" is missing. Get it from http://simplehtmldom.sourceforge.net/  and place the script "simple_html_dom.php" in the same folder to allow me to work.'); }
+require_once('simple_html_dom.php');
+
+$html = file_get_html('http://www.flickr.com/explore') or returnError('404 Not Found', 'ERROR: could not request Flickr');
+$items = Array();
+foreach($html->find('span.photo_container') as $element) 
+{
+    $item['href'] = 'http://flickr.com'.$element->find('a',0)->href;  // Page URI
+    $item['thumbnailUri'] = $element->find('img',0)->getAttribute('data-defer-src');  // Thumbnail URI
+    $item['title'] = $element->find('a',0)->title;  // Photo title
+    $items[] = $item;
+}
+
+if(empty($items)) { returnError('404 Not Found', 'ERROR: no results.'); }
+$format = 'atom';
+if (!empty($_GET['format'])) { $format = $_GET['format']; }
+switch($format) 
+{
+    case 'plaintext':
+    case 'json':
+    case 'atom':
+        break;
+    default:
+        $format='atom';
+}
+
+if($format == 'plaintext') { header('content-type: text/plain;charset=utf8'); print_r($items); exit; }
+if($format == 'json') { header('content-type: application/json'); $items = json_encode($items); exit($items); }
+if($format == 'atom') 
+{
+    header('content-type: application/atom+xml; charset=UTF-8');
+    echo '<?xml version="1.0" encoding="UTF-8"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:thr="http://purl.org/syndication/thread/1.0" xml:lang="en-US">'."\n";
+    echo '<title type="text">Flickr Explore</title>'."\n";
+    echo '<id>http'.(isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on' ? 's' : '')."://{$_SERVER['HTTP_HOST']}{$_SERVER['PATH_INFO']}".'/</id>'."\n";
+    echo '<updated>'.date(DATE_ATOM, $tweets['0']['timestamp']).'</updated>'."\n";
+    echo '<link rel="alternate" type="text/html" href="http://www.flickr.com/explore" />'."\n";
+    echo '<link rel="self" href="http'.(isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on' ? 's' : '')."://{$_SERVER['HTTP_HOST']}".htmlentities($_SERVER['REQUEST_URI']).'" />'."\n"."\n";
+
+    foreach($items as $item) {
+        echo '<entry><author><name>Flickr</name><uri>http://flickr.com/</uri></author>'."\n";
+        echo '<title type="html"><![CDATA['.$item['title'].']]></title>'."\n";
+        echo '<link rel="alternate" type="text/html" href="'.$item['href'].'" />'."\n";
+        echo '<id>'.$item['href'].'</id>'."\n";
+        echo '<updated></updated>'."\n"; // FIXME: date ???
+        echo '<content type="html"><![CDATA[<a href="'.$item['href'].'"><img src="'.$item['thumbnailUri'].'" /></a>]]></content>'."\n";
+        echo '</entry>'."\n\n";
+        }
+    echo '</feed>';
+    exit;
+}
+
+exit();