Beefy Boxes and Bandwidth Generously Provided by pair Networks
Your skill will accomplish
what the force of many cannot

comment on

( #3333=superdoc: print w/replies, xml ) Need Help??
Greetings OverlordQ and Fellow Monks I saw your Astronomy Pick Of The Day post, liked it, and thought it would be really cool taken one step further and put to Perl/Tk. So... I adapted the code from another post of mine Perl/Tk---Weather Map Grabber and appended the relevant code to your original.

So now the script does the following:
1) Grabs the Image
2) Saves it to a day specific filename yyyymmdd format as suggested by sauoq (I agree it does allow for easier filename sorting)
3) Displays it in a Tk Window!
4) Clicking on the Image displays a dialog box containing image source info.

Important Note for Windows ActiveState Perl 5.6.1 users: as of Build 635, their still appears to be a compatability issue with Tk::JPEG, a module used by this script. I have come up with a 'work-around' for this problem. If you encounter this issue please see my node that addresses this Re: Activestate TK::JPEG compatibility issue -- QUICK WORK AROUND FOUND, Any Better Ideas?. This should not be an issue for Unix/Linux users since they would compile the module on their own specific OS.

Anyway... enough said. The code is posted below.

As always, any input or suggestions for improvement of this code are greatly appreciated.
Enjoy and Have Fun!

UPDATE: 08/26/2003 -- Modified Perl/Tk Display section of the code to account for the possibility of grabbing a gif image. However, need to work on the proper functional display of an animated gif which it looks like today's image appears to be.
Any suggestions on how to do this in Perl/Tk? Thanks.

#!/usr/bin/perl use strict; use warnings; use URI::URL; use LWP::Simple qw/get/; use Tk; use Tk::DialogBox; use Tk::Photo; use Tk::JPEG; my $TOP = ""; my $IMGPATH = 'image/\d{4}/\w+.(gif|jpg|jpeg)'; my @timearray = gmtime(); #my $time = sprintf "%02d%02d%04d", ($timearray[4]+1), ($timearray[3]) +, ($timearray[5]+1900); my $time = sprintf "%04d%02d%02d", ($timearray[5]+1900),($timearray[4 +]+1), ($timearray[3]); my $titledate=sprintf "%02d-%-02d-%04d", ($timearray[4]+1), ($timearra +y[3]), ($timearray[5]+1900); my $content = get $TOP or die "Cannot get APOD Page\n"; my ($imgurl) = $content =~ m!($IMGPATH)!i; $imgurl = url($imgurl,$TOP)->abs; print "Acquiring Image File ....\n"; my $picture = get $imgurl or die "Cannot grab image: $!\n"; my $ext=$2; my $fmt="jpeg"; if ($ext =~ m/(gif)/ig){$fmt="gif";} my $imgfile="apod$time\.$ext"; print "Saving as $imgfile . \n"; open(OUT, ">$imgfile") or die "Cannot write to file: $!\n"; binmode(OUT); print OUT $picture; close OUT; my $MW=MainWindow->new(-title=>"Astronomy Pic of The Day $titledate"); ### --- Prevents Main Window Resizing $MW->bind('<Configure>' => sub{ my $xe = $MW->XEvent; $MW->maxsize($xe->w, $xe->h); $MW->minsize($xe->w, $xe->h); }); print "generating Tk Window ....\n"; # my $image = $MW->Photo('-format' => 'jpeg', -file=>'apod08222003.jpg +'); #my $image = $MW->Photo('-format' => 'jpeg', -file=>$imgfile); my $image = $MW->Photo('-format' => $fmt, -file=>$imgfile); $MW->Button(-image=>$image, -command => sub { my $dialogA = $MW->DialogBox( -title => "About This Image", -buttons => [ "OK" ], ); $dialogA->add("Label", -borderwidth => '2', -background => "#FAEBD7", #ANTIQUE WHITE -font => 'bold', -justify => 'left', -relief => 'sunken', -text => "This Image is Produced by: N +ASA GSFC,\n and can be found along with other Astronomy Related Image +s here:\n")->pack; ### --- Prevents Dialog Box Resizing $dialogA->bind('<Configure>' => sub{ my $xeD = $dialogA->XEvent; $dialogA->maxsize($xeD->w, $xeD->h); $dialogA->minsize($xeD->w, $xeD->h); }); $dialogA->Show; } )->pack; MainLoop(); ## Original Astronomy POD code by OverlordQ 08/22/2003 ## ## Additional Perl/Tk code by: PERLscienceman 08/24/2003 ## Code by PERLscienceman updated 08/26/2003 to compensate for capture + of .gif ##

In reply to Perl/Tk --- Astronomy Pic of the Day Grabber by PERLscienceman
in thread Astronomy Pic of the Day Grabber by OverlordQ

Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post; it's "PerlMonks-approved HTML":

  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.
  • Log In?

    What's my password?
    Create A New User
    and the web crawler heard nothing...

    How do I use this? | Other CB clients
    Other Users?
    Others drinking their drinks and smoking their pipes about the Monastery: (2)
    As of 2021-03-07 03:14 GMT
    Find Nodes?
      Voting Booth?
      My favorite kind of desktop background is:

      Results (119 votes). Check out past polls.