MetaGerSearch.php 2.87 KB
Newer Older
Dominik Hebeler's avatar
Dominik Hebeler committed
1
2
3
4
<?php

namespace App\Http\Controllers;

5
use App;
6
use App\MetaGer;
7
use Illuminate\Http\Request;
Dominik Hebeler's avatar
Dominik Hebeler committed
8

9
const TIP_SERVER = 'http://metager3.de:63825/tips.xml';
10

Dominik Hebeler's avatar
Dominik Hebeler committed
11
12
class MetaGerSearch extends Controller
{
13
    public function search(Request $request, MetaGer $metager)
14
    {
15
        $focus = $request->input("focus", "web");
16

17
18
19
20
21
        if ($focus === "maps") {
            $searchinput = $request->input('eingabe', '');
            return redirect()->to('https://maps.metager.de/map/' . $searchinput . '/1240908.5493525574,6638783.2192695495,6');
        }

22
        /*if ($focus !== "angepasst" && $this->startsWith($focus, "focus_")) {
23
24
        $metager->parseFormData($request);
        return $metager->createView();
25
26
        }*/

27
        #die($request->header('User-Agent'));
28
        $time = microtime(true);
29
30
        # Mit gelieferte Formulardaten parsen und abspeichern:
        $metager->parseFormData($request);
31

32
33
        # Nach Spezialsuchen überprüfen:
        $metager->checkSpecialSearches($request);
34

35
36
37
        # Die Quicktips als Job erstellen
        $quicktips = $metager->createQuicktips();

38
        # Suche für alle zu verwendenden Suchmaschinen als Job erstellen,
39
        # auf Ergebnisse warten und die Ergebnisse laden
40
        $metager->createSearchEngines($request);
41

42
43
        # Versuchen die Ergebnisse der Quicktips zu laden
        $quicktipResults = $quicktips->loadResults();
44
45
46
        # Alle Ergebnisse vor der Zusammenführung ranken:
        $metager->rankAll();

47
        # Ergebnisse der Suchmaschinen kombinieren:
Phil Höfer's avatar
Phil Höfer committed
48
        $metager->prepareResults();
49

50
        # Die Ausgabe erstellen:
51
        return $metager->createView($quicktipResults);
Dominik Hebeler's avatar
Dominik Hebeler committed
52
53
    }

54
55
56
57
58
59
60
61
    public function botProtection($redirect)
    {
        $hash = md5(date('YmdHi'));
        return view('botProtection')
            ->with('hash', $hash)
            ->with('r', $redirect);
    }

62
63
    public function get($url)
    {
64
        $ctx = stream_context_create(array('http' => array('timeout' => 2)));
65
        return file_get_contents($url, false, $ctx);
66
    }
67
68
69
70
71
72

    private function startsWith($haystack, $needle)
    {
        $length = strlen($needle);
        return (substr($haystack, 0, $length) === $needle);
    }
73
74
75
76

    public function tips(Request $request)
    {
        $tips_text = file_get_contents(TIP_SERVER);
77
        $tips = [];
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
        try {
            $tips_xml = simplexml_load_string($tips_text);

            $tips_xml->registerXPathNamespace('mg', 'http://metager.de/tips/');
            $tips_xml = $tips_xml->xpath('mg:tip');
            foreach ($tips_xml as $tip_xml) {
                $tips[] = $tip_xml->__toString();
            }
        } catch (\Exception $e) {
            Log::error("A problem occurred loading tips from the tip server.");
            Log::error($e->getMessage());
            abort(500);
        }
        return view('tips')
            ->with('title', trans('tips.title'))
            ->with('tips', $tips);
    }
95
}