Frage

Ich habe für ein Programm auf einem Meteorologen gearbeitet, dass ich benutze, und es funktioniert gut, zum größten Teil. Hier ist, was ich bisher haben. (Achtet nicht auf die zs.stuff. Das Programm spezifisch ist, und hat keinen Einfluss auf die Lua-Codierung.)

if not http then http = require("socket.http") end  

local locale = string.gsub(zs.params(1),"%s+","%%20")
local page = http.request("http://www.wunderground.com/cgi-bin/findweather/getForecast?query=" .. locale .. "&wuSelect=WEATHER")
local location = string.match(page,'title="([%w%s,]+) RSS"')
--print("Gathering weather information for " .. location .. ".")
--local windspeed = string.match(page,'<span class="nobr"><span class="b">([%d.]+)</span>&nbsp;mph</span>')
--print(windspeed)
local condition = string.match(page, '<td class="vaM taC"><img src="http://icons-ecast.wxug.com/i/c/a/[%w_]+.gif" width="42" height="42" alt="[%w%s]+" class="condIcon" />')
--local image = string.match(page, '<img src="http://icons-ecast.wxug.com/i/c/a/(.+).gif" width="42" height="42" alt="[%w%s]+" class="condIcon" />')
local temperature = string.match(page,'pwsvariable="tempf" english="&deg;F" metric="&deg;C" value="([%d.]+)">')
local humidity = string.match(page,'pwsvariable="humidity" english="" metric="" value="(%d+)"')
zs.say(location)
--zs.say("image ./Images/" .. image .. ".gif")
zs.say("<color limegreen>Condition:</color> <color white>" .. condition .. "</color>")
zs.say("<color limegreen>Temperature: </color><color white>" .. temperature .. "F</color>")
zs.say("<color limegreen>Humidity: </color><color white>" .. humidity .. "%</color>")

Mein Hauptproblem ist dies: Ich habe den ‚Zustand‘ geändert und die ‚Bild‘ Variablen hinzugefügt, was sie jetzt sind. Auch wenn die Leitungsanpassung sein, es sollte direkt von der Webseite kommt, schlägt es überhaupt passen. Also ich frage mich, was es ist, ich vermisse, dass dieser Code ist zu verhindern, dass zu arbeiten. Wenn ich die
nehmen     <td class="vaM taC"> es wird einwandfrei Zustand entsprechen. (Aus irgendeinem Grund kann ich nicht die obige Zeile korrekt dargestellt, aber es gibt keinen Raum zwischen dem `

Kann mir jemand Punkt, was ist falsch? Abgesehen von dem Pattern-Matching, ich versichern Ihnen, die Linie ist wörtlich von der Webseite.

Eine andere Frage, die ich hatte, ist die Fähigkeit, über Zeilenumbrüche übereinstimmen. Gibt es eine Möglichkeit, dies zu tun? Der Grund, warum ich frage ist, weil auf derselben Seite, ein paar der Dinge, die ich zu Spiel muß auf separate Linien aufgebrochen, und da die eigentlichen Muster, das ich bin zu wollen Shows in anderen Orten auf der Seite zusammenpassen, ich brauche die Lage sein, über Zeilenumbrüche passen die genauen Muster zu erhalten.

War es hilfreich?

Lösung

Sie können Ihr Spiel erheblich vereinfachen (siehe unten), aber im Allgemeinen sieht es aus wie Sie zwei Probleme haben ...

  • Missing die () um das Spiel Sie erfassen möchten.
  • Sie müssen die entkommen. Zeichen in Ihrem Spiel, indem sie% zu machen.

Ich habe versucht und es hat funktioniert ...

local page = [[<td class="vaM taC"><img src="http://icons-ecast.wxug.com/i/c/a/hello_world.gif" width="42" height="42" alt="HELLO WOLRD" class="condIcon" />]]
local condition, image = string.match(page, '.+/([%w_]+)%.gif".+alt="([%w%s]+)".+')
print(condition, image)

Dieses gedruckt ...

hello_world    HELLO WORLD

als für mehrzeilige, dass das kein Problem sein sollte, sind die Zeilenumbrüche nur Steuerzeichen, und wenn Sie in mehreren Zeilen in die gleiche Zeichenfolge lesen dieses Spiel funktioniert.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top