Skip to content

Commit

Permalink
Merge pull request #81 from j0k3r/ifttt
Browse files Browse the repository at this point in the history
Add Ifttt extractor
  • Loading branch information
j0k3r committed Feb 19, 2016
2 parents ddbabab + 3f7ce70 commit 8e4800a
Show file tree
Hide file tree
Showing 6 changed files with 358 additions and 210 deletions.
66 changes: 66 additions & 0 deletions src/FeedBundle/Extractor/Ifttt.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
<?php

namespace Api43\FeedBundle\Extractor;

use GuzzleHttp\Exception\RequestException;

class Ifttt extends AbstractExtractor
{
protected $recipeId = null;

/**
* {@inheritdoc}
*/
public function match($url)
{
$host = parse_url($url, PHP_URL_HOST);
$path = parse_url($url, PHP_URL_PATH);

if (false === $host || false === $path) {
return false;
}

if (0 !== strpos($host, 'ifttt.com')) {
return false;
}

// match recipe id
preg_match('/recipes\/([0-9]+)\-?/i', $path, $matches);

if (!isset($matches[1])) {
return false;
}

$this->recipeId = $matches[1];

return true;
}

/**
* {@inheritdoc}
*/
public function getContent()
{
if (!$this->recipeId) {
return '';
}

try {
$data = $this->client
->get('https://ifttt.com/oembed/?url=https://ifttt.com/recipes/'.$this->recipeId.'&format=json')
->json();
} catch (RequestException $e) {
$this->logger->warning('Ifttt extract failed for: '.$this->recipeId, [
'exception' => $e,
]);

return '';
}

if (!is_array($data) || empty($data)) {
return '';
}

return '<div><h2>'.$data['title'].'</h2><p>'.$data['description'].'</p><p><a href="https://ifttt.com/recipes/'.$this->recipeId.'"><img src="https://ifttt.com/recipe_embed_img/'.$this->recipeId.'"></a></p></div>';
}
}
172 changes: 172 additions & 0 deletions src/FeedBundle/Resources/config/extractors.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,172 @@
services:
# feed extractor
feed.extractor.chain:
class: Api43\FeedBundle\Extractor\ExtractorChain

feed.extractor.imgur:
class: Api43\FeedBundle\Extractor\Imgur
arguments:
- "@imgur.client"
calls:
- [ setLogger, [ "@logger" ]]
- [ setClient, [ "@guzzle.client" ]]
tags:
- { name: feed.extractor, alias: imgur }

feed.extractor.twitter:
class: Api43\FeedBundle\Extractor\Twitter
arguments:
- "@twitter.client"
calls:
- [ setLogger, [ "@logger" ]]
- [ setClient, [ "@guzzle.client" ]]
tags:
- { name: feed.extractor, alias: twitter }

feed.extractor.tumblr:
class: Api43\FeedBundle\Extractor\Tumblr
arguments:
- %tumblr.api_key%
calls:
- [ setLogger, [ "@logger" ]]
- [ setClient, [ "@guzzle.client" ]]
tags:
- { name: feed.extractor, alias: tumblr }

feed.extractor.vine:
class: Api43\FeedBundle\Extractor\Vine
calls:
- [ setLogger, [ "@logger" ]]
- [ setClient, [ "@guzzle.client" ]]
tags:
- { name: feed.extractor, alias: vine }

feed.extractor.instagram:
class: Api43\FeedBundle\Extractor\Instagram
calls:
- [ setLogger, [ "@logger" ]]
- [ setClient, [ "@guzzle.client" ]]
tags:
- { name: feed.extractor, alias: instagram }

feed.extractor.vidme:
class: Api43\FeedBundle\Extractor\Vidme
calls:
- [ setLogger, [ "@logger" ]]
- [ setClient, [ "@guzzle.client" ]]
tags:
- { name: feed.extractor, alias: vidme }

feed.extractor.gfycat:
class: Api43\FeedBundle\Extractor\Gfycat
calls:
- [ setLogger, [ "@logger" ]]
- [ setClient, [ "@guzzle.client" ]]
tags:
- { name: feed.extractor, alias: gfycat }

feed.extractor.flickr:
class: Api43\FeedBundle\Extractor\Flickr
arguments:
- %flickr.api_key%
calls:
- [ setLogger, [ "@logger" ]]
- [ setClient, [ "@guzzle.client" ]]
tags:
- { name: feed.extractor, alias: flickr }

feed.extractor.github:
class: Api43\FeedBundle\Extractor\Github
calls:
- [ setLogger, [ "@logger" ]]
- [ setClient, [ "@guzzle.client" ]]
tags:
- { name: feed.extractor, alias: github }

feed.extractor.deviantart:
class: Api43\FeedBundle\Extractor\Deviantart
calls:
- [ setLogger, [ "@logger" ]]
- [ setClient, [ "@guzzle.client" ]]
tags:
- { name: feed.extractor, alias: deviantart }

feed.extractor.camplus:
class: Api43\FeedBundle\Extractor\Camplus
calls:
- [ setLogger, [ "@logger" ]]
- [ setClient, [ "@guzzle.client" ]]
tags:
- { name: feed.extractor, alias: camplus }

feed.extractor.soundcloud:
class: Api43\FeedBundle\Extractor\Soundcloud
calls:
- [ setLogger, [ "@logger" ]]
- [ setClient, [ "@guzzle.client" ]]
tags:
- { name: feed.extractor, alias: soundcloud }

feed.extractor.vimeo:
class: Api43\FeedBundle\Extractor\Vimeo
calls:
- [ setLogger, [ "@logger" ]]
- [ setClient, [ "@guzzle.client" ]]
tags:
- { name: feed.extractor, alias: vimeo }

feed.extractor.youtube:
class: Api43\FeedBundle\Extractor\Youtube
calls:
- [ setLogger, [ "@logger" ]]
- [ setClient, [ "@guzzle.client" ]]
tags:
- { name: feed.extractor, alias: youtube }

feed.extractor.dailymotion:
class: Api43\FeedBundle\Extractor\Dailymotion
calls:
- [ setLogger, [ "@logger" ]]
- [ setClient, [ "@guzzle.client" ]]
tags:
- { name: feed.extractor, alias: dailymotion }

feed.extractor.spotify:
class: Api43\FeedBundle\Extractor\Spotify
calls:
- [ setLogger, [ "@logger" ]]
- [ setClient, [ "@guzzle.client" ]]
tags:
- { name: feed.extractor, alias: spotify }

feed.extractor.hackernews:
class: Api43\FeedBundle\Extractor\HackerNews
calls:
- [ setLogger, [ "@logger" ]]
- [ setClient, [ "@guzzle.client" ]]
tags:
- { name: feed.extractor, alias: hackernews }

feed.extractor.rue89:
class: Api43\FeedBundle\Extractor\Rue89
calls:
- [ setLogger, [ "@logger" ]]
- [ setClient, [ "@guzzle.client" ]]
tags:
- { name: feed.extractor, alias: rue89 }

feed.extractor.streamable:
class: Api43\FeedBundle\Extractor\Streamable
calls:
- [ setLogger, [ "@logger" ]]
- [ setClient, [ "@guzzle.client" ]]
tags:
- { name: feed.extractor, alias: streamable }

feed.extractor.ifttt:
class: Api43\FeedBundle\Extractor\Ifttt
calls:
- [ setLogger, [ "@logger" ]]
- [ setClient, [ "@guzzle.client" ]]
tags:
- { name: feed.extractor, alias: ifttt }
26 changes: 26 additions & 0 deletions src/FeedBundle/Resources/config/improvers.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
services:
# improver
feed.improver.chain:
class: Api43\FeedBundle\Improver\ImproverChain

feed.improver.hackernews:
class: Api43\FeedBundle\Improver\HackerNews
arguments:
- "@guzzle.client"
tags:
- { name: feed.improver, alias: hackernews }

feed.improver.reddit:
class: Api43\FeedBundle\Improver\Reddit
arguments:
- "@guzzle.client"
tags:
- { name: feed.improver, alias: reddit }

# this one should be the last one (because this is the default one :)
feed.improver.default_improver:
class: Api43\FeedBundle\Improver\DefaultImprover
arguments:
- "@guzzle.client"
tags:
- { name: feed.improver, alias: default_improver }
20 changes: 20 additions & 0 deletions src/FeedBundle/Resources/config/parsers.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
services:
# parser
feed.parser.chain:
class: Api43\FeedBundle\Parser\ParserChain

feed.parser.external:
class: Api43\FeedBundle\Parser\External
arguments:
- "@guzzle.client"
- 'https://readability.com/api/content/v1/parser'
- %readability_token%
tags:
- { name: feed.parser, alias: external }

feed.parser.internal:
class: Api43\FeedBundle\Parser\Internal
arguments:
- "@graby"
tags:
- { name: feed.parser, alias: internal }
Loading

0 comments on commit 8e4800a

Please sign in to comment.