diff options
author | Nicolas LÅ“uillet <nicolas@loeuillet.org> | 2015-01-26 22:15:19 +0100 |
---|---|---|
committer | Nicolas LÅ“uillet <nicolas@loeuillet.org> | 2015-01-26 22:15:19 +0100 |
commit | 6b767d1cc0e9697af95ec399fd612d203d10826a (patch) | |
tree | 5257200fa45da0218a9c63f0738f18eb6c876775 /src/Wallabag/CoreBundle/Service | |
parent | ad4d1caa9e744af57ca58a4e57576533eb682d00 (diff) | |
download | wallabag-6b767d1cc0e9697af95ec399fd612d203d10826a.tar.gz wallabag-6b767d1cc0e9697af95ec399fd612d203d10826a.tar.zst wallabag-6b767d1cc0e9697af95ec399fd612d203d10826a.zip |
refactoring for fetching content
Diffstat (limited to 'src/Wallabag/CoreBundle/Service')
-rw-r--r-- | src/Wallabag/CoreBundle/Service/Extractor.php | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/src/Wallabag/CoreBundle/Service/Extractor.php b/src/Wallabag/CoreBundle/Service/Extractor.php new file mode 100644 index 00000000..790386d4 --- /dev/null +++ b/src/Wallabag/CoreBundle/Service/Extractor.php | |||
@@ -0,0 +1,92 @@ | |||
1 | <?php | ||
2 | |||
3 | namespace Wallabag\CoreBundle\Service; | ||
4 | |||
5 | use Wallabag\CoreBundle\Helper\Content; | ||
6 | use Wallabag\Wallabag\Url; | ||
7 | |||
8 | final class Extractor | ||
9 | { | ||
10 | public static function extract($url) { | ||
11 | $pageContent = Extractor::getPageContent(new Url(base64_encode($url))); | ||
12 | $title = ($pageContent['rss']['channel']['item']['title'] != '') ? $pageContent['rss']['channel']['item']['title'] : _('Untitled'); | ||
13 | $body = $pageContent['rss']['channel']['item']['description']; | ||
14 | |||
15 | $content = new Content(); | ||
16 | $content->setTitle($title); | ||
17 | $content->setBody($body);; | ||
18 | |||
19 | return $content; | ||
20 | } | ||
21 | /** | ||
22 | * Get the content for a given URL (by a call to FullTextFeed) | ||
23 | * | ||
24 | * @param Url $url | ||
25 | * @return mixed | ||
26 | */ | ||
27 | public static function getPageContent(Url $url) | ||
28 | { | ||
29 | // Saving and clearing context | ||
30 | $REAL = array(); | ||
31 | foreach( $GLOBALS as $key => $value ) { | ||
32 | if( $key != 'GLOBALS' && $key != '_SESSION' && $key != 'HTTP_SESSION_VARS' ) { | ||
33 | $GLOBALS[$key] = array(); | ||
34 | $REAL[$key] = $value; | ||
35 | } | ||
36 | } | ||
37 | // Saving and clearing session | ||
38 | if (isset($_SESSION)) { | ||
39 | $REAL_SESSION = array(); | ||
40 | foreach( $_SESSION as $key => $value ) { | ||
41 | $REAL_SESSION[$key] = $value; | ||
42 | unset($_SESSION[$key]); | ||
43 | } | ||
44 | } | ||
45 | |||
46 | // Running code in different context | ||
47 | $scope = function() { | ||
48 | extract( func_get_arg(1) ); | ||
49 | $_GET = $_REQUEST = array( | ||
50 | "url" => $url->getUrl(), | ||
51 | "max" => 5, | ||
52 | "links" => "preserve", | ||
53 | "exc" => "", | ||
54 | "format" => "json", | ||
55 | "submit" => "Create Feed" | ||
56 | ); | ||
57 | ob_start(); | ||
58 | require func_get_arg(0); | ||
59 | $json = ob_get_contents(); | ||
60 | ob_end_clean(); | ||
61 | return $json; | ||
62 | }; | ||
63 | |||
64 | // Silence $scope function to avoid | ||
65 | // issues with FTRSS when error_reporting is to high | ||
66 | // FTRSS generates PHP warnings which break output | ||
67 | $json = @$scope(__DIR__ . "/../../../../vendor/wallabag/Fivefilters_Libraries/makefulltextfeed.php", array("url" => $url)); | ||
68 | |||
69 | // Clearing and restoring context | ||
70 | foreach ($GLOBALS as $key => $value) { | ||
71 | if($key != "GLOBALS" && $key != "_SESSION" ) { | ||
72 | unset($GLOBALS[$key]); | ||
73 | } | ||
74 | } | ||
75 | foreach ($REAL as $key => $value) { | ||
76 | $GLOBALS[$key] = $value; | ||
77 | } | ||
78 | |||
79 | // Clearing and restoring session | ||
80 | if (isset($REAL_SESSION)) { | ||
81 | foreach($_SESSION as $key => $value) { | ||
82 | unset($_SESSION[$key]); | ||
83 | } | ||
84 | |||
85 | foreach($REAL_SESSION as $key => $value) { | ||
86 | $_SESSION[$key] = $value; | ||
87 | } | ||
88 | } | ||
89 | |||
90 | return json_decode($json, true); | ||
91 | } | ||
92 | } \ No newline at end of file | ||