Anfragen an Online-Datenbank stellen, z.b. wetter.com

Status
Nicht offen für weitere Antworten.

odysseus

Bekanntes Mitglied
gestern abend bin ich in einem #channel auf einen bot gestossen, der einige coole sachen drauf hatte.

auf den befehl !wetter münchen reagierte er so:
München, heiter bis wolkig, bei 10°C, etc. bla bla

ich weiss inzwischen die datem erhält der bot von wetter.com.

auf den befehl !tv sat1 postete der bot sogar die nächsten 3 sendungen auf sat1 :D
vielleicht von tvmovie ausgelesen, oder so..


meine frage, jemand eine ahnung wie das geht ?
ist das eine http-anfrage und dann liest man den quelltext aus ?
oder wie ?
 

nekton

Aktives Mitglied
ich denke mal die haben einfach die seite angefragt und dann die entsprechenden passagen herausgeparst. siehe dazu

- java.net.URL
- java.net.HttpURLConnection
- java.lang.String
 

odysseus

Bekanntes Mitglied
Du meinst die erhalten vom server eine .html seite als antwort bzw. .php seite, auf jeden fall ein bisschen text und den text durchsucht man dann nach schlüsselworten wie "temperatur" oder so ?

also wen wetter.com da mal was ändert, dann müsste man das skript wieder anpassen ?

die idee nen text zu durchsuchen gefällt mir nicht.
 

odysseus

Bekanntes Mitglied
ist zwar jetzt ein grosser brocken, aber ich han die url zu dem php file nicht mehr da, deswegen hier der code:

Code:
<?php
/*
 * Copyright (C) 2003 rIppA (rippa@game4ever.de)
 * [url]http://codebase.game4ever.de[/url]
 * 07.08.2003
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 * 
 *******************************************************************************
 * Syntax: wetter("12345") // PLZ
 *
* 
* Anwendungsbeispiel :

$wetter = wetter("12345");

$error = $wetter["error"];          // (1/0) wenn 1: fehler -> keine daten
$error_msg $wetter["msg"];          // fehlertext

// wenn kein fehler aufgetreten ist:
$plz = $wetter["plz"];                    // plz
$stadt = $wetter["stadt"];                // gefundener stadt-name
$akt_temp = $wetter["akt_temp"];          // aktuelle temperatur
$max_temp =  $wetter["max_temp"];         // max. temperatur
$min_temp =  $wetter["min_temp"];         // min. temperatur
$niederschlag = $wetter["niederschlag"];  // niederschlagswahrscheinlichkeit

*
*
 *
 */

function wetter($params) {

   $buffer = '';

      $url = "http://www.wetter.com";
      $suchseite = $url . "/home/structure/control.php?sessionID=&Lang=DE&ms=1&ss=1&sss=2&search=" . $params;

      if ($fp = fsockopen ("www.wetter.com", 80, $errno, $errstr, 30)) {
         fputs ($fp, "GET $suchseite HTTP/1.0\r\nHost: Search\r\n\r\n");
         while (!feof($fp)) $buffer .= fgets ($fp, 1024);
         fclose ($fp);

         if (preg_match('/Diese Postleitzahl ist uns leider nicht bekannt/is', $buffer)) {

            # unbekannte plz
            $return["error"] = 1;
            $return["msg"] = "wetter infos: unbekannte PLZ!";
            return $return;
        
         } else {

            if (preg_match('/PLZ-SUCHE/is',$buffer)) {

               preg_match('/<div class="tabHeadline">\((.+?) Treffer\)<\/div><\/td>(.+?)<td colspan="3"><a href="control.php(.+?)" class="tabBody">(.+?)<\/a><\/td>/is',$buffer,$matches);
               $newseite = $url . "/home/structure/control.php" . $matches[3];
               $buffer = "";
               $fp = fsockopen ("www.wetter.com", 80, $errno, $errstr, 30);
               fputs ($fp, "GET $newseite HTTP/1.0\r\nHost: Search\r\n\r\n");
               while (!feof($fp)) $buffer .= fgets ($fp, 1024);
               fclose ($fp);

            }

            preg_match('/alt="Webcam für (.+?) \(Deutschland\) zeigen"/is',$buffer,$matches);
            $stadt = $matches[1];

            preg_match('/<td width="66"><span class="tabHeadline">Temp.:<\/span><\/td>(.+?)<td width="53" align="right"><span class="tabBody">(.+?)<\/span><\/td>(.+?)<td width="30" align="right"><span class="tabBody">&C<\/span><\/td>/is',$buffer,$matches);
            $akt_temp = $matches[2];

            preg_match('/<table width="200"(.+?)<td><span class="tabHeadline">max. Temp.:<\/span><\/td>(.+?)<td align="center" colspan="2"><span class="tabBody">(.+?) &C<\/span><\/td>/is', $buffer, $matches);
            $max_temp = $matches[3];

            preg_match('/<table width="200"(.+?)<td><span class="tabHeadline">min. Temp:<\/span><\/td>(.+?)<td align="center" colspan="2"><span class="tabBody">(.+?) &C<\/span><\/td>/is', $buffer, $matches);
            $min_temp = $matches[3];
         
            preg_match('/<table width="200"(.+?)<td><span class="tabHeadline">Niederschlag\?<\/span><\/td>(.+?)<td align="center" colspan="2"><span class="tabBody">(.+?) %<\/span><\/td>/is', $buffer, $matches);
            $niederschlag = $matches[3];

            if (empty($stadt)) {
               $return["error"] = 1;
               $return["msg"] = "wetter infos: kein ergebnis gefunden!";
               return $return;
            } else {
               $return["error"] = 0;
               $return["plz"] = $params;
               $return["stadt"] = $stadt;
               $return["akt_temp"] = $akt_temp;
               $return["max_temp"] = $max_temp;
               $return["min_temp"] = $min_temp;
               $return["niederschlag"] = $niederschlag;
               return $return;
            }
            
         }

      } else {
         $return["error"] = 1;
         $return["msg"] = "Please try again later!";
         return $return;
      }

}

?>

den gilt es in java umzusetzen, sieht easy aus. aber so strings zu durchforsten ist halt nicht besonders nice, muss schönere lösungen geben...
 

odysseus

Bekanntes Mitglied
Code:
preg_match('/<div class="tabHeadline">\((.+?) Treffer\)<\/div><\/td>(.+?)<td colspan="3"><a href="control.php(.+?)" class="tabBody">(.+?)<\/a><\/td>/is',$buffer,$matches);


das ist ja mal ne schön php funktion! besonders das (.+?) find ich cool!!
gesucht wird ein Strin unbekannter Länge, der zwischen zwei bekannten Strings liegt. Das Ergebnis wird in matches[1],matches[2],matches[3].. gespeichert.

jemand einen vorschlag wie ich das in java mache ?
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
R Anfängerbeispiel: Suche Java-Anwendung die http-Anfragen in Tomcat liest Netzwerkprogrammierung 8
R Problem mit mehreren Anfragen auf demselben Port Netzwerkprogrammierung 2
Icewind Klasse für DNS Anfragen Netzwerkprogrammierung 14
F Schulprojekt erweitern - Online Quiz mit mehreren Clients - Was benötige ich ? Netzwerkprogrammierung 0
Da_Tebe Online MauMau Netzwerkprogrammierung 3
L Erstellen eines Online Multiplayer Apps Netzwerkprogrammierung 10
F Highscore online speichern Netzwerkprogrammierung 14
D Offline App mit online MYSQL - DB verbinden Netzwerkprogrammierung 14
K Mobile online Anwendung - Java mit SAP Netzwerkprogrammierung 2
G Online-Datendienst absichern Netzwerkprogrammierung 2
A Online-Server lima-city Netzwerkprogrammierung 11
F Highscore ( online ) Netzwerkprogrammierung 70
A Einfachste Möglichkeit online zu speichern? Netzwerkprogrammierung 28
E Socket Online Highscore. Vorgehensweise Netzwerkprogrammierung 9
M Socket Server online stellen! Netzwerkprogrammierung 14
M Abfrage ob jemand bestimmtes Online ist. Netzwerkprogrammierung 4
S welche Rechner sind im lokalen Netz online Netzwerkprogrammierung 11
T Testen ob server online ist Netzwerkprogrammierung 10
G Server online Netzwerkprogrammierung 7
B HTML mit Webserver und Datenbank verbinden Netzwerkprogrammierung 2
JavaWolf165 Mini-Datenbank durch Link Netzwerkprogrammierung 6
S Client Anwendung mit zentraler SQL-Datenbank Netzwerkprogrammierung 3
F String in Datenbank speichern Netzwerkprogrammierung 1
P RMI Threads die über RMI auf Datenbank zugreifen Netzwerkprogrammierung 2
N Client-Server-Datenbank Netzwerkprogrammierung 13
E Verbindung zu SQL-Datenbank auf einem Server Netzwerkprogrammierung 13
X SSH Verbindung zu Remote Datenbank Netzwerkprogrammierung 2
A HTTP Binärdaten über PHP-Skript in Datenbank schreiben bzw auslesen Netzwerkprogrammierung 2
G DDD Datenbank Schema Netzwerkprogrammierung 2
F HTTP Highscore Datenbank (Java <-> PHP) Netzwerkprogrammierung 17
U Allgemeiner Ratschlag zu meinem Programmunterfangen mit zentraler Datenbank Netzwerkprogrammierung 12
D Content einer email in sql-datenbank speichern Netzwerkprogrammierung 9
M RMI direkte Verbindung mit einer Mysql datenbank Netzwerkprogrammierung 13
D RMI Aufruf und danach Datenbank ? Netzwerkprogrammierung 10
N RMI und Datenbank Objekte Netzwerkprogrammierung 3
P Praktikumsarbeit: Zugriff Active Directory/Server/Datenbank Netzwerkprogrammierung 15
P Massen emails verschicken an Kunden die in Datenbank sind Netzwerkprogrammierung 4
K Datenbank-anbidung ueber php Netzwerkprogrammierung 3
A Zugriff auf Inet Datenbank? Netzwerkprogrammierung 4

Ähnliche Java Themen


Oben