@Elayne
The explanation is pretty long, but since you didn't specify which video you wanted, I can't provide a link myself. I did, however, develop a simple way of generating the links for every video on the site, and this can be found at the bottom of the explanation. If you don't care about the details, just skip down to the end.
-------------------
Explanation
-------------------
This video is hidden within a container, is linked to on a different site, has a link which must be assembled, uses the no-extension trick, and is all-in-all a total pain in the ass to download. Here's how it's done.
First, the standard Page Info method.
Opening the Media tab yields three "Embed" type files, and all three are .swf files. Let's look at filenames. In the order they are displayed, the EMBED files are:
"http://m1.2mdn.net/1249604/6026_728x90_uA.swf.....etc."
"thanksgiving_data/6026_728x90_uA.swf"
"http://m1.2mdn.net/1286484/PID_151567_AG_Xmas-ad_120x600_100k.swf.....etc."
"http://m1.2mdn.net/1286484/PID_151567_AG_Xmas-ad_120x600_100k.swf.....etc."
"B2077590_data/PID_151567_AG_Xmas-ad_120x600_100k.swf"
and finally
"http://ak.imgag.com/imgag/product/preview/flash/wsShell.swf.....etc."
Of all of these files, any that contain the word "Ad" can probably be thrown out, since this site uses .swf based ads. This leaves only the first two and last .swf files. By trial and error, you can find out that the first two are not the video you want. The last one on the list seems blank, but that's our best choice. A blank .swf file usually is a container, and finding the container is the first step to finding the video. With this in mind, select the container file (wShell.swf) in the Page Info dialog. This is the one I have selected in the image below.
Now, let's look at this link. Copy it from Page Info into Notepad in you want, as you will be able to read it more easily.
I have copied it here also:
"http://ak.imgag.com/imgag/product/preview/flash/wsShell.swf
?ihost=http://ak.imgag.com/imgag&brand=/product/preview/flas
h/wsag&cardNum=/product/full/ap/3110890/graphic1&ahost=http:
//www.americangreetings.com&mtype=1&&NameFirstFrom=sender&Na
meFirstTo=recipient&mode=init"
Looking at this URL, we can see that it contains many parts. If we seperate the URL into it's seperate statements, we may be able to make sense of it.
If you're www-savvy, then you know that the designation "?" in a URL means that the website link ends, and something called
variable assignment begins. If you aren't www-savvy, memorize that. Everything in a URL after the "?" is ignored by your web browser and goes directly to the linked URL, as an input. The syntax is "Variable=Value", and each variable is seperated by an ampersand sign (&).
Seperating the URL using this method yields:
Quote:
http://ak.imgag.com/imgag/product/preview/flash/wsShell.swf
?ihost=http://ak.imgag.com/imgag
&brand=/product/preview/flash/wsag
&cardNum=/product/full/ap/3110890/graphic1
&ahost=http://www.americangreetings.com
&mtype=1&
&NameFirstFrom=sender
&NameFirstTo=recipient&mode=init
Particular vairables of interest to us are those which contain URL's or any relevant term, i.e. "video", "swf", etc. Looking at the seperated URL, wee can see that the variables "iHost", "brand", "cardnum", and "aHost" all contain URLs. "aHost" points right back to American Greetings, which is the site that we came from. This is probably not the URL we are looking for, then. This leaves the other three for possible investigation. Seeing as none of these three variables contain a
complete URL to a .swf file, we can only assume that they must be combined in come way to reveal the location.
There are two ways to find out how to combine them-- the disassembly method, or the trial-and-error method. The trial-and-error method isn't my style. I
could have tried combinations of all of these variables until one worked, but that would ruin the challenge!
The Disassembly Method
----------------------
The general rules for container .swf files are:
If the container .swf has a specified Configuration file, as with the "pastespecial.swf" solution shown above, then the URL or some form of it can be found in the Config file.
If the container does NOT have a configuration file, then the URL or some form of the URL is somewhere IN the container .swf, probably in pure hex format. This is like the "Zelda.swf" solution above.
--
Since our "wsShell.swf" link does not contain a config file of any type, we can assume that the second rule is applicable. This means.....time for a Hex Editor.
Cracking open the file "wsShell.swf" reveals:
The ASCII (plain text) on the right is the plain text equivalent of the pure data on the left. See anything familiar in this text? Sure enough, the terms "iHost", "cardnum", and "brand" are all present! Let's take a closer look at this part of the data:
mainContainer...........@.....Y.......?.n....:..._parent.ihost.brand.
.swf.brand_mc.brandAnimationLoaded.............N...........NG.....G..
......@...............&.....T&..brand_mc.@.@.@.@.@.@.@.@.@.@.@.@.....
..brandLoadCheck.@.?.8.......brandAnimationLoaded.......I............
............@.?..................brandLoadLoop.@.?......A...brand_mc.
play._parent.ihost.cardNum..swf._parent.mainContainer................
.....R............N...........NG.....G........@........brandPlay.@.@.
@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.?......p...loadedBytes._par
ent.mainContainer.getBytesLoaded.totalBytes.getBytesTotal.brandDurati
on.true.play.gotoAndPlay.......
We see a recurring theme here;
"parent" + "iHost" + either "brand" or "cardnum" + ".swf". From this, we can figure that the syntax for compiling the URL is as follows:
add the strings "parent", "ihost", and either "brand" or "cardnum". Then, add the string ".swf" to the end.
There is only one difficulty now; deciding between whether to use "brand" or "cardnum" in the URL string. Let's compare them.
Quote:
brand=/product/preview/flash/wsag
cardNum=/product/full/ap/3110890/graphic1
The "brand" url string contains the directory "preview", while the "cardnum" string contains the directory "full" and several sub-directories. At this point, common sense tells us that "full" is the one we want, rather than "preview". With that in mind, we now put the "cardnum" string into the syntax given by the disassembled .swf file. This is what we get.
"parent" + "iHost" + "cardnum" + ".swf"
We know that:
ihost=http://ak.imgag.com/imgag
cardNum=/product/full/ap/3110890/graphic1
Since we don't have any variables named "parent", we'll forget about it for now. So, our URL syntax is now easily understandable; add "iHost" and "cardnum" to make a URL, then stick ".swf" on the end. Let's try it.
When we access this URL, we are rewarded with.... nothing??!!!! WTF?!!!!
Don't worry though, nothing isn't always bad! If you download this seemingly blank .swf file, you'll find that it's pretty large for something that does nothing. So, this is presumable our video...but how do we get it to play?
How about right-clicking and hitting "Play"?
Ahh, the power of common sense.
And here, we have reached our final solution.
-----------------------
The Solution
-----------------------
1) Using the "page info" dialog, find the EMBED object named "wsShell.swf".
2) In the URL for this file, copy the variable "cardnum". When looking at the URL, look for "&cardnum=" and copy the text directly following it, up to the next "&" sign.
3) Paste the "cardnum" text after the "iHost" URL, which is consistently "http://ak.imgag.com/imgag". At the end of this combination, add ".swf".
4) You should have a resulting URL that has syntax as follows:
"http://ak.imgag.com/imgag/product/full/ap/(some number)/graphic1.swf".
example:
5) Access the URL, and you will see a seemingly blank window. To play it, right-click and choose "Play". To download the video, use File>Save Page As.
6) To make the downloaded video play, open it as usual with your web browser or Flash Player, then right-click and choose "Play".