summaryrefslogtreecommitdiff
path: root/bridges/MarktplaatsBridge.php
diff options
context:
space:
mode:
authorJohannes 'josch' Schauer <josch@debian.org>2020-11-10 13:17:03 +0100
committerJohannes 'josch' Schauer <josch@debian.org>2020-11-10 13:17:03 +0100
commitdaeb2c0913653d197fad2a75010cfc6034c6a9e8 (patch)
treed25328f98ca39a5ac8abad156b5e8f5781505a3c /bridges/MarktplaatsBridge.php
parent432eb165b83d4483780a279b02929b05b3e09fa5 (diff)
New upstream version 2020-11-10+dfsg1
Diffstat (limited to 'bridges/MarktplaatsBridge.php')
-rw-r--r--bridges/MarktplaatsBridge.php127
1 files changed, 127 insertions, 0 deletions
diff --git a/bridges/MarktplaatsBridge.php b/bridges/MarktplaatsBridge.php
new file mode 100644
index 0000000..ada6592
--- /dev/null
+++ b/bridges/MarktplaatsBridge.php
@@ -0,0 +1,127 @@
+<?php
+
+class MarktplaatsBridge extends BridgeAbstract {
+ const NAME = 'Marktplaats';
+ const URI = 'https://marktplaats.nl';
+ const DESCRIPTION = 'Read search queries from marktplaats.nl';
+ const PARAMETERS = array(
+ 'Search' => array(
+ 'q' => array(
+ 'name' => 'query',
+ 'type' => 'text',
+ 'required' => true,
+ 'title' => 'The search string for marktplaats',
+ ),
+ 'z' => array(
+ 'name' => 'zipcode',
+ 'type' => 'text',
+ 'required' => false,
+ 'title' => 'Zip code for location limited searches',
+ ),
+ 'd' => array(
+ 'name' => 'distance',
+ 'type' => 'number',
+ 'required' => false,
+ 'title' => 'The distance in meters from the zipcode',
+ ),
+ 'f' => array(
+ 'name' => 'priceFrom',
+ 'type' => 'number',
+ 'required' => false,
+ 'title' => 'The minimal price in cents',
+ ),
+ 't' => array(
+ 'name' => 'priceTo',
+ 'type' => 'number',
+ 'required' => false,
+ 'title' => 'The maximal price in cents',
+ ),
+ 's' => array(
+ 'name' => 'showGlobal',
+ 'type' => 'checkbox',
+ 'required' => false,
+ 'title' => 'Include result with negative distance',
+ ),
+ 'i' => array(
+ 'name' => 'includeImage',
+ 'type' => 'checkbox',
+ 'required' => false,
+ 'title' => 'Include the image at the end of the content',
+ ),
+ 'r' => array(
+ 'name' => 'includeRaw',
+ 'type' => 'checkbox',
+ 'required' => false,
+ 'title' => 'Include the raw data behind the content',
+ )
+ )
+ );
+ const CACHE_TIMEOUT = 900;
+
+ public function collectData() {
+ $query = '';
+ $excludeGlobal = false;
+ if(!is_null($this->getInput('z')) && !is_null($this->getInput('d'))) {
+ $query = '&postcode=' . $this->getInput('z') . '&distanceMeters=' . $this->getInput('d');
+ }
+ if(!is_null($this->getInput('f'))) {
+ $query .= '&PriceCentsFrom=' . $this->getInput('f');
+ }
+ if(!is_null($this->getInput('t'))) {
+ $query .= '&PriceCentsTo=' . $this->getInput('t');
+ }
+ if(!is_null($this->getInput('s'))) {
+ if(!$this->getInput('s')) {
+ $excludeGlobal = true;
+ }
+ }
+ $url = 'https://www.marktplaats.nl/lrp/api/search?query=' . urlencode($this->getInput('q')) . $query;
+ $jsonString = getSimpleHTMLDOM($url, 900) or returnServerError('No contents received!');
+ $jsonObj = json_decode($jsonString);
+ foreach($jsonObj->listings as $listing) {
+ if(!$excludeGlobal || $listing->location->distanceMeters >= 0) {
+ $item = array();
+ $item['uri'] = 'https://marktplaats.nl' . $listing->vipUrl;
+ $item['title'] = $listing->title;
+ $item['timestamp'] = $listing->date;
+ $item['author'] = $listing->sellerInformation->sellerName;
+ $item['content'] = $listing->description;
+ $item['categories'] = $listing->verticals;
+ $item['uid'] = $listing->itemId;
+ if(!is_null($this->getInput('i')) && !empty($listing->imageUrls)) {
+ $item['enclosures'] = $listing->imageUrls;
+ if(is_array($listing->imageUrls)) {
+ foreach($listing->imageUrls as $imgurl) {
+ $item['content'] .= "<br />\n<img src='https:" . $imgurl . "' />";
+ }
+ } else {
+ $item['content'] .= "<br>\n<img src='https:" . $listing->imageUrls . "' />";
+ }
+ }
+ if(!is_null($this->getInput('r'))) {
+ if($this->getInput('r')) {
+ $item['content'] .= "<br />\n<br />\n<br />\n" . json_encode($listing);
+ }
+ }
+ $item['content'] .= "<br>\n<br>\nPrice: " . $listing->priceInfo->priceCents / 100;
+ $item['content'] .= '&nbsp;&nbsp;(' . $listing->priceInfo->priceType . ')';
+ if(!empty($listing->location->cityName)) {
+ $item['content'] .= "<br><br>\n" . $listing->location->cityName;
+ }
+ if(!is_null($this->getInput('r'))) {
+ if($this->getInput('r')) {
+ $item['content'] .= "<br />\n<br />\n<br />\n" . json_encode($listing);
+ }
+ }
+ $this->items[] = $item;
+ }
+ }
+ }
+
+ public function getName(){
+ if(!is_null($this->getInput('q'))) {
+ return $this->getInput('q') . ' - Marktplaats';
+ }
+ return parent::getName();
+ }
+}