1

NOAA から気象データ/アラートを取得するために作成した perl コードがいくつかあります。

私のコードはとてもシンプルです:

use Weather::NOAA::Alert;
use Data::Dumper;

$alert = Weather::NOAA::Alert->new(['TXC301']);

$events = $alert->get_events();
$alert->poll_events();

print Dumper($events);

# @url = (keys %{$VAR1->{'TXC301'}});
# $url = $VAR1->{'TXC301'};
$url = $events->{'TXC301'};

print "URL is $url\n";

# $expires= $events->{'TXC301'}->{$url}->{'expires'};

$expires= $events->{'TXC301'}->{'http://alerts.weather.gov/cap/wwacapget.php?x=TX12516CBE9400.FloodWarning.12516CC068C0TX.MAFFLWMAF.f21e7ce7cf8e930ab73a110c4d912576'}->{'expires'};

print "Expires:  $expires\n";

出力:

$VAR1 = {
          'TXC301' => {
                        'http://alerts.weather.gov/cap/wwacapget.php?x=TX12516CBE9400.FloodWarning.12516CC068C0TX.MAFFLWMAF.f21e7ce7cf8e930ab73a110c4d912576' => {
                                                                                                                                                                 'certainty' => 'Likely',
                                                                                                                                                                 'senderName' => 'NWS Midland-Odessa (Western Texas and Southeastern New Mexico)',
                                                                                                                                                                 'urgency' => 'Expected',
                                                                                                                                                                 'instruction' => 'A FLOOD WARNING MEANS THAT FLOODING IS IMMINENT OR HAS BEEN REPORTED.
STREAM RISES WILL BE SLOW AND FLASH FLOODING IS NOT EXPECTED.
HOWEVER... ALL INTERESTED PARTIES SHOULD TAKE NECESSARY PRECAUTIONS
IMMEDIATELY.
DO NOT DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE
ROADWAY. THE WATER DEPTH MAY BE TOO GREAT TO ALLOW YOUR CAR TO CROSS
SAFELY.',
                                                                                                                                                                 'description' => 'THE NATIONAL WEATHER SERVICE IN MIDLAND HAS ISSUED A
   FLOOD WARNING FOR...
SOUTHWESTERN LOVING COUNTY IN WEST TEXAS...
NORTHWESTERN WARD COUNTY IN WEST TEXAS...
NORTH CENTRAL REEVES COUNTY IN SOUTHWEST TEXAS...
   UNTIL 300 PM CDT FRIDAY
   AT 259 AM CDT...ROADS REMAIN CLOSED NEAR THE PECOS RIVER BETWEEN
RED BLUFF AND INTERSTATE 20 BECAUSE OF ELEVATED RIVER LEVELS DUE
TO RECENT RAINS. FLOODING WILL ALSO IMPACT THE CITY OF PECOS.',
                                                                                                                                                                 'event' => 'Flood Warning',
                                                                                                                                                                 'delete' => 0,
                                                                                                                                                                 'category' => 'Met',
                                                                                                                                                                 'severity' => 'Moderate',
                                                                                                                                                                 'effective' => '2014-09-26T03:00:00-05:00',
                                                                                                                                                                 'headline' => 'Flood Warning issued September 26 at 3:00AM CDT until September 26 at 3:00PM CDT by NWS Midland-Odessa',
                                                                                                                                                                 'expires' => '2014-09-26T15:00:00-05:00'
                                                                                                                                                               }
                      }
        };
URL is HASH(0x26384c0)
Expires:  2014-09-26T15:00:00-05:00

TXC301 はレポート識別子です。

スクリプトの出力には、NOAA から取得したすべての値が出力されます。

目標は、「有効期限」の値を格納/返すことです。

コメントアウトされた行がありますが、これは私の目標を達成するための試みでした。

私が抱えている問題は、 $url 変数を取得することです。$expires 値を取得するには、この値が必要です。私のコードの最後の 2 行目は $expires 値を正しく取得しますが、これを行うには、URL を行にハード コードする必要がありました。

そのすぐ上の行(最後から3番目)を機能させようとしています:

 $expires= $events->{'TXC301'}->{$url}->{'expires'};

ただし、これは保存される $url 値に依存します。$url 値を取得する方法がわかりません。

私の推測:

@url = (keys %{$VAR1->{'TXC301'}});
$url = $VAR1->{'TXC301'};
$url = $events->{'TXC301'};

どれも機能しません。

どんな助けでも素晴らしいでしょう。

ありがとう!

よろしく、

ジョセフ・スペンナー

4

2 に答える 2

2

そのレベルのハッシュ ref に値が 1 つしかない場合は、次を使用できますvalues

print +( values %{ $VAR1->{TXC301} } )[0]{expires}, "\n";

出力:

2014-09-26T15:00:00-05:00

Data::Dumper の代替

Data::Dumpまた、別の問題として、コア ライブラリの使用を推奨したいと思いますData::Dumper

この代替のデフォルト設定と機能は優れた出力を提供し、以下に示すようにデータ構造をより迅速に分析できるようにします。

$VAR1 = {
          'TXC301' => {
                        'http://alerts.weather.gov/cap/wwacapget.php?x=TX12516CBE9400.FloodWarning.12516CC068C0TX.MAFFLWMAF.f21e7ce7cf8e930ab73a110c4d912576' => {
                                                                                                                                                                 'certainty' => 'Likely',
                                                                                                                                                                 'senderName' => 'NWS Midland-Odessa (Western Texas and Southeastern New Mexico)',
                                                                                                                                                                 'urgency' => 'Expected',
                                                                                                                                                                 'instruction' => 'A FLOOD WARNING MEANS THAT FLOODING IS IMMINENT OR HAS BEEN REPORTED.
STREAM RISES WILL BE SLOW AND FLASH FLOODING IS NOT EXPECTED.
HOWEVER... ALL INTERESTED PARTIES SHOULD TAKE NECESSARY PRECAUTIONS
IMMEDIATELY.
DO NOT DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE
ROADWAY. THE WATER DEPTH MAY BE TOO GREAT TO ALLOW YOUR CAR TO CROSS
SAFELY.',
                                                                                                                                                                 'description' => 'THE NATIONAL WEATHER SERVICE IN MIDLAND HAS ISSUED A
   FLOOD WARNING FOR...
SOUTHWESTERN LOVING COUNTY IN WEST TEXAS...
NORTHWESTERN WARD COUNTY IN WEST TEXAS...
NORTH CENTRAL REEVES COUNTY IN SOUTHWEST TEXAS...
   UNTIL 300 PM CDT FRIDAY
   AT 259 AM CDT...ROADS REMAIN CLOSED NEAR THE PECOS RIVER BETWEEN
RED BLUFF AND INTERSTATE 20 BECAUSE OF ELEVATED RIVER LEVELS DUE
TO RECENT RAINS. FLOODING WILL ALSO IMPACT THE CITY OF PECOS.',
                                                                                                                                                                 'event' => 'Flood Warning',
                                                                                                                                                                 'delete' => 0,
                                                                                                                                                                 'category' => 'Met',
                                                                                                                                                                 'severity' => 'Moderate',
                                                                                                                                                                 'effective' => '2014-09-26T03:00:00-05:00',
                                                                                                                                                                 'headline' => 'Flood Warning issued September 26 at 3:00AM CDT until September 26 at 3:00PM CDT by NWS Midland-Odessa',
                                                                                                                                                                 'expires' => '2014-09-26T15:00:00-05:00'
                                                                                                                                                               }
                      }
        };

use Data::Dump;
dd $VAR1;

出力:

{
  TXC301 => {
    "http://alerts.weather.gov/cap/wwacapget.php?x=TX12516CBE9400.FloodWarning.12516CC068C0TX.MAFFLWMAF.f21e7ce7cf8e930ab73a110c4d912576" => {
      category    => "Met",
      certainty   => "Likely",
      delete      => 0,
      description => "THE NATIONAL WEATHER SERVICE IN MIDLAND HAS ISSUED A\n   FLOOD WARNING FOR...\nSOUTHWESTERN LOVING COUNTY IN WEST TEXAS...\nNORTHWESTERN WARD COUNTY IN WEST TEXAS...\nNORTH CENTRAL REEVES COUNTY IN SOUTHWEST TEXAS...\n   UNTIL 300 PM CDT FRIDAY\n   AT 259 AM CDT...ROADS REMAIN CLOSED NEAR THE PECOS RIVER BETWEEN\nRED BLUFF AND INTERSTATE 20 BECAUSE OF ELEVATED RIVER LEVELS DUE\nTO RECENT RAINS. FLOODING WILL ALSO IMPACT THE CITY OF PECOS.",
      effective   => "2014-09-26T03:00:00-05:00",
      event       => "Flood Warning",
      expires     => "2014-09-26T15:00:00-05:00",
      headline    => "Flood Warning issued September 26 at 3:00AM CDT until September 26 at 3:00PM CDT by NWS Midland-Odessa",
      instruction => "A FLOOD WARNING MEANS THAT FLOODING IS IMMINENT OR HAS BEEN REPORTED.\nSTREAM RISES WILL BE SLOW AND FLASH FLOODING IS NOT EXPECTED.\nHOWEVER... ALL INTERESTED PARTIES SHOULD TAKE NECESSARY PRECAUTIONS\nIMMEDIATELY.\nDO NOT DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE\nROADWAY. THE WATER DEPTH MAY BE TOO GREAT TO ALLOW YOUR CAR TO CROSS\nSAFELY.",
      senderName  => "NWS Midland-Odessa (Western Texas and Southeastern New Mexico)",
      severity    => "Moderate",
      urgency     => "Expected",
    },
  },
}
于 2014-09-26T19:46:05.920 に答える