Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >从Slideshare.net 下载Slide的方法:

从Slideshare.net 下载Slide的方法:

作者头像
Enjoy233
发布于 2019-03-05 02:45:36
发布于 2019-03-05 02:45:36
12.2K00
代码可运行
举报
运行总次数:0
代码可运行

从Slideshare.net 下载Slide的方法

    Slideshare.net上有很多不错的Slide都没有提供下载链接,平常倒也无所谓,都是收藏后直接在线观看的。

    这段时间对ZARA的商业模式很感兴趣,相关的文档较少,刚好在Slideshare上有几个关于ZARA不错的Slides,而且都没有提供下载,需要保存到本地以供好好研究,于是研究了一下从Slideshare下载Slide的方法。

1、在线视频站点的FLV文件下载方法

    对于像Youtube、优酷这样采用Flash技术的视频网站,要下载其FLV文件,有如下几种方法:

    1)、使用Firefox 的Video DownloadhelperSothink SWF Catcher 这样的插件下载

    2)、使用第三方的下载工具,诸如Orbit Grab++、维棠FLV视频下载软件、UUme FLV Spy、网络嗅探器(影音神探)等

    3)、使用一些专门提供解析流行的视频网站下载地址的服务,例如downflv.comflvcd.com

    以上方案都有其局限性,只适合或服务软件支持的一些网站,因此也很少使用。

    4)、使用Live HTTP Headers、Firebug、Wireshark、Sniffer、URL Snooper这样的抓包器抓包,获得FLV的实际下载地址,然后直接用下载工具下载

    5)、利用浏览器的临时文件夹。在通过浏览器观看视频、观看图片的时候,视频文件及图片等已经下载到浏览器的临时文件夹里了,因此可以到浏览器的临时文件夹中直接查找对应的视频即可。

      IE浏览器临时文件夹:工具->Internet选项->常规->Internet临时文件->设置->查看文件

      Firefox临时文件夹:about:cache->Disk cache device->List Cache Entries->CTRL+F查找

   以上两种方案基本上能够通吃所有的视频网站,只是相对麻烦一点。

2、Slideshare的SWF文件下载方法

    尽管Slideshare也是采用Flash技术来实现Slide展示,但与Youtube、Youku这样的视频网站不同的是,其每一个幻灯片都是独立的Flash的SWF文件,并不是FLV格式的Flash Video文件,而且近期似乎Slideshare对SWF的地址也进行了特殊处理,直接用方法4的抓包器进行抓包,并不能获得SWF文件实际的下载地址。

    例如,我要下载ZARA:Fast Fashion的SWF文件,可以有如下几种方法

    1)、清除Firefox的隐私数据,在浏览器浏览完所有的幻灯片,然后到浏览器的临时文件夹中查找对应的SWF文件。此种方案适合幻灯片较少的情况,如果幻灯片有上百页,考虑到slideshare上经常出现始终“Loading…”的情况,在线观看能否看完以及看完后查找都是一个大问题。

    2)、清除Firefox的隐私数据,访问要下载的幻灯片(只需要到初始页,不需要浏览所有的幻灯片),然后到浏览器的临时文件夹中查找对应的类似“SLIDE_NAME.xml”这样的xml文件的路径,其中SLIDE_NAME大致为幻灯片的名称,例如ZARA:Fast Fashion对应的为http://cdn.slideshare.net/zara2820.xml?1188219016 ,此xml文件实际上就是幻灯片对应的所有的SWF文件的下载地址,例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<Show Id="98359"> 
<Slide Src="https://s3.amazonaws.com:443/slideshare/zara2820-slide-1.swf"/> 
<Slide Src="https://s3.amazonaws.com:443/slideshare/zara2820-slide-2.swf"/> 
<Slide Src="https://s3.amazonaws.com:443/slideshare/zara2820-slide-3.swf"/><Slide Src="https://s3.amazonaws.com:443/slideshare/zara2820-slide-23.swf"/> 
<Slide Src="https://s3.amazonaws.com:443/slideshare/zara2820-slide-24.swf"/> 
</Show>

    然后用Orbit、迅雷这样的下载工具的批量下载功能直接下载这些文件到指定的文件夹。

   另外:

    其实在Slideshare没有改变SWF的处理方式前,像Slideshare DOWNLOADerGreasmonkey Script还是挺方便的。

    可以参考:

Download Slides from SlideShare.net – Firefox Add-on

Download from SlideShare – slideshare DOWNLOAD dot com

3、Slideshare的SWF文件转化为PDF幻灯片

    目前尚未找到好的工具能够直接把Slideshare的SWF文件直接转化为ppt或pdf的幻灯片文件,像Flash搅拌器这样的工具其实也很难用。

    目前采用如下的方法:

    1)、安装Acrobat Professional 8。

        注意是Acrobat Professional ,不是Acrobat Reader;以前的Acrobat版本也行,只不过Acroabt 8对于合并多个PDF文件较为方便。

    2)、Acrobat安装完成后,缺省在控制面板的“打印机和传真”中创建了“Adobe PDF”的虚拟打印机,设置“Adobe PDF”的属性:

    “Adobe PDF属性->打印首选项->布局->方向”:设置为横向     “Adobe PDF属性->打印首选项->Adobe PDF设置->Adobe PDF页面大小”:设置为Slide 7.5 x 10

    3)、将下载SWF文件直接拖到浏览器中,然后右键->打印->常规->选中Adobe PDF为打印设备->打印

    4)、使用Acrobat 8的合并文件功能,合并所有的pdf文件

    这样就得到了SWF文件对应的PDF格式的幻灯片。

Slideshare PPT下载shell脚本

    以前总结过在slideshare上下载文件的方法(参考:从Slideshare.net 下载Slide的方法) ,只不过以上下载操作都需要手工操作,极其不人性化。尤其是在将swf格式的文件转化为pdf格式时候,要手动对一个几十页的ppt执行以上操作不累死人才怪,因此方法归方法,我自己都不怎么使用。   

Slideshare Downloader是一个shell脚本,能自动下载slideshare上不提供下载功能的ppt并保存为pdf格式的文档。只不过在本机的Redhat Enterprise Server 5.3上试了一下,发现脚本有些问题。

    1、Slideshare Downloader用于解码swf文件的swfdec包在Redhat Enterprise Server上安装很麻烦,依赖一大堆包,捣腾了半天都未搞定,于是放弃掉使用swfdec。

        swfdec项目似乎从08年依赖就未更新过了,其官方wiki http://swfdec.freedesktop.org  也许久未维护了,登录进去全是灌水的广告帖子,刚开始还以为走错地方了。

swfdec的安装指南

swfdec的代码下载地址

   2、Slideshare Downloader直接用imagemagick的convert命令将多个png文件转化为一个pdf文件,测试了一下似乎不行。按照imagemagick 官方帮助的说明,多个png格式的文件不能直接使用convert命令合并成一个pdf文件     

    However, some formats, such as JPEG and PNG, do not support more than one image per file, and in that case ImageMagick is forced to write each image as a separate file.  imagemagick adjoin帮助

   3、Slideshare Downloader脚本应该是在UbuntuDebian系列的环境上测试的,在Redhat 下一些命令的语法似乎有问题

      在处理BASH_REMATCH 时候, RedHat 要加“”

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    if [[ "$DOCID" =~ "([a-z0-9-]+)$"  ]]
    then
        DOCID=${BASH_REMATCH[0]}
    else
        echo $DOCID
        exit 1
    fi

       在Redhat下sort命令无-V参数

     基于以上几个原因,为方便自己使用,对Slideshare Downloader脚本进行了调整,测试了几个文档,应该还行。需要安装swftoolspdftkimagemagick

    大致的方法:

    1、使用wget -q –O 获得指定url地址文档的所有swf文件的实际地址并下载

    2、使用swftools的swfrender命令将swf文件转为png格式的文件

    3、使用imagemagick的convert  +adjoin 将png格式的每个文件都转化为对应的单个pdf文件。

    4、使用pdftk将多个pdf文件合并成一个pdf文件

     在合并多个pdf文件为一个pdf文件时候,由于需要按照页面顺序合并,因此使用了sort -k1.3

      PDFS=`ls *.pdf | sort -k1.3 `

   调整过的代码(只在Redhat 上做了测试,且对代码未做优化):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/bin/bash

# Author: Andrea Lazzarotto 
# http://andrealazzarotto.com 
# andrea.lazzarotto@gmail.com 
# Slideshare Downloader

# This script takes a slideshare presentation URL as an argument and 
# carves all the slides in flash format, then they are converted to 
# and finally merged as a PDF 
# License:

# Copyright 2010-2011 Andrea Lazzarotto 
# This script is licensed under the Gnu General Public License v3.0. 
# You can obtain a copy of this license here: http://www.gnu.org/licenses/gpl.html
# Usage:

# slideshare-downloader.sh URL [SIZE] 
#———————————————–

# Modify 7/08/2011 by giudinvx 
# Email  giudinvx[at]gmail[dot]com 
#———————————————– 
validate_input() { 
    # Performs a very basic check to see if the url is in the correct form 
    URL=`echo "$1" | cut -d "#" -f 1 | cut -d "/" -f 1-5` 
    DOMAIN=`echo "$URL" | cut -d "/" -f 3` 
    CORRECT=’www.slideshare.net’ 
    if [[ "$DOMAIN" != "$CORRECT" ]]; 
        then 
            echo "Provided URL is not valid." 
            exit 1 
    fi 
    if echo -n "$2" | grep "^[0-9]*$">/dev/null 
        then SIZE=$2 
        else 
            SIZE=2000 
            echo "Size not defined or invalid… defaulting to 2000." 
    fi 
} 
check_dependencies() {

    # Verifies if all binaries are present 
    DEP="wget sed seq  convert" 
    ERROR="0" 
    for i in $DEP; do 
        WHICH="`which $i`" 
        if [[ "x$WHICH" == "x" ]]; 
            then 
                echo "Error: $i not found." 
                ERROR="1" 
        fi 
    done 
    if [ "$ERROR" -eq "1" ]; 
        then 
            echo "You need to install some packages." 
            echo "Remember: this script requires Imagemagick and Swfdec." 
            exit 1 
    fi 
} 
build_params() {

    # Gathers required information 
    DOCSHORT=`echo "$1" | cut -d "/" -f 5` 
    echo "Download of $DOCSHORT started." 
    echo "Fetching information…" 
    INFOPAGE=`wget -q -O – "$1"` 
    DOCID=`echo "$INFOPAGE" | grep "doc=" | cut -d "=" -f 3 | cut -d "&" -f 1` 
    if [[ "$DOCID" =~ "([a-z0-9-]+)$" ]] 
    then 
        DOCID=${BASH_REMATCH[0]} 
    else 
        echo $DOCID 
        exit 1 
    fi 
    SLIDES=`echo "$INFOPAGE" | grep "totalSlides" | head -n 1 | sed -s "s/.*totalSlides//g" | cut -d ":" -f 2 | cut -d "," -f 1` 
    echo "Slides: $SLIDES" 
    echo "Size: $SIZE" 
} 
create_env() {

    # Finds a suitable name for the destination directory and creates it 
    DIR=$DOCSHORT 
    if [ -e "$DIR" ]; 
        then 
            I="-1" 
            OLD=$DIR 
            while [ -e "$DIR" ] 
            do 
                I=$(( $I + 1 )) 
                DIR="$OLD.$I" 
            done 
    fi 
    mkdir "$DIR" 
} 
fetch_slides() {

    for i in $( seq 1 $SLIDES ); do 
        echo "Downloading slide $i" 
        wget "http://cdn.slidesharecdn.com/`echo $DOCID`-slide-`echo $i`.swf" -q -O "$DIR/slide-`echo $i`.swf" 
    done 
    echo "All slides downloaded." 
} 
convert_slides() {

    for i in $( seq 1 $SLIDES ); do 
        echo "Converting slide $i" 
#        swfdec-thumbnailer -s $SIZE $DIR/slide-$i.swf $DIR/slide-$i.png 2>/dev/null 
        swfrender $DIR/slide-$i.swf -o $DIR/$i.png 2>/dev/null 
    done

    echo "All slides converted." 
} 
build_pdf() {

    cd $DIR 
    IMAGES=`ls *.png | sort -k1.3 ` 
    echo "Generating PDF…" 
    convert $IMAGES +adjoin %d.pdf 
    PDFS=`ls *.pdf | sort -k1.3 ` 
    pdftk $PDFS cat output $DOCSHORT.pdf 
    cd .. 
    echo "The PDF has been generated." 
    echo "Find your presentation in: \"`pwd`/$DIR/$DOCSHORT.pdf\"" 
} 
clean() {

    rm -rf $DIR/*.swf 
    rm -rf $DIR/*.png 
} 
validate_input $1 $2

check_dependencies 
build_params $URL 
create_env 
fetch_slides 
convert_slides 
build_pdf 
clean 

脚本下载请猛击

    同样的程序逻辑其实可以适用于百度文库、豆丁这样的在线文库。像百度文库、豆丁之类的在线文库许多资料需要积分下载,但可免费在线浏览,这些文库都使用Flash作为播放器,这就为免积分下载器提供了条件。当然在windows上有冰点文库下载器易读文库下载器这样的图形化工具可用。只不过原理应该也是类似的,看一下冰点文库下载器目录下的SWFToImage.DLL、pdflib.dll两个动态库大致可以知道。

    其实谁有兴趣和精力可以将此类下载功能做成一个单独的在线服务,由此还可以延伸出其他产品功能来,应该还是挺有市场的。

相关链接:http://www.yeeach.com/?p=470

http://www.yeeach.com/?p=1160

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2013年05月30日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
[oeasy]python069_当前作用域都有些什么_列表dir_函数_builtins
oeasy
2025/02/24
1100
[oeasy]python069_当前作用域都有些什么_列表dir_函数_builtins
[oeasy]python058_一句话让python崩了
电子排版领域 The underscore is not the same character as the dash character, although one convention for text news wires is to use an underscore when an em-dash or en-dash is desired, or when other non-standard characters such as bullets would be appropriate. A series of underscores [like -___ ] may be used to create a blank to be filled in on a form, although the resulting blank may have tiny gaps between each individual underscore. It is also sometimes used to create a horizontal line; other symbols with similar graphemes, such as hyphens and dashes, are also used for this purpose.
oeasy
2025/01/08
1060
[oeasy]python058_一句话让python崩了
[oeasy]python073_下划线在python里是什么含义_内部变量_私有变量_系统变量
from math import pi as math_pi from my_file import pi as my_pi print(locals())
oeasy
2025/03/12
1430
[oeasy]python073_下划线在python里是什么含义_内部变量_私有变量_系统变量
[oeasy]python0011_ 字符序号_ordinal_ord
​序号(ordinal)回忆上次内容​hello world​​ 不是从来就有的来自于​​unix​​和​​c​​虽然我们今天有各种先进的学习手段最早的高级语言学习是从最早的那张打字机用纸的手写代码起源的输出用的函数名是 ​​print​​ 打印也是从那个时候来的最早输出的是字符串是 ​​"hello world"​也是从那个时候来的这就成了一个迷因等等!计算机里面不都是二进制的 0 和 1 吗哪里来的​​hello​​ 中的 ​​h​​ 之类的字符呢?🤔​编辑字符本质#进入python3解释器pyth
oeasy
2022/11/07
5410
[oeasy]python0011_ 字符序号_ordinal_ord
[oeasy]python057_如何删除print函数_dunder_builtins_系统内建模块
057如何删除print函数_dunder_builtins_系统内建模块9 播放 · 0 赞同视频
oeasy
2025/01/06
970
[oeasy]python057_如何删除print函数_dunder_builtins_系统内建模块
[oeasy]python0024_ 输出时间_time_模块_module_函数_function
​输出时间回忆上次内容​print​​函数有个默认的 ​​end参数​​​end参数​​ 的值可以是任意字符串​​end参数​​ 的值会输出到结尾位置​​end参数​​ 的默认值是 ​​\n​​如果​​end​​是空串(​​end=""​​)意味着输出后不自动换行我可以手动在输出字符串的末尾加上换行符(​​\n​​)这样的话我不但可以控制输出时结尾是否换行还能控制具体在哪里换行我还想输出点别的比如说当前⏰时间?🤔搜索代码​编辑百度​​python3 输出时间​​抄写代码​编辑​#​​号 后面的都是注
oeasy
2022/12/03
9350
[oeasy]python0024_ 输出时间_time_模块_module_函数_function
[oeasy]python070_如何导入模块_导入模块的作用_hello_dunder_双下划线
import jieba from wordcloud import WordCloud import matplotlib.pyplot as plt # 读取文件 with open('/usr/lib/python3.8/LICENSE.txt') as file: text = file.read() # 使用jieba进行中文分词 words = ' '.join(jieba.cut(text)) # 生成词云 wordcloud = WordCloud(font_path='/usr/share/fonts/truetype/wqy/wqy-microhei.ttc', # 指定中文字体路径 width=800, height=600, background_color='white').generate(words) # 使用matplotlib展示词云 plt.imshow(wordcloud, interpolation='bilinear') plt.axis('off') plt.show()
oeasy
2025/03/01
2070
[oeasy]python070_如何导入模块_导入模块的作用_hello_dunder_双下划线
[oeasy]python0040_换行与回车的不同_通用换行符_universal_newlines
换行回车回忆上次内容区分概念 terminal终端 主机网络中 最终的 端点TeleTYpewriter 电传打印机终端硬件shell 终端硬件基础上的 软件壳子Console 控制台 主机旁边 的 控制面板存储文件 的 时候 我 在文件里 打了回车\n系统 将0x0a存入字节 进文件换行 自动就有 回车功能 了吗?🤔回忆一下 被忽略的 \r\r \r 也是一个 ascii字符 \是 转义字符\r是 转义序列 什么是 转义 呢? 转义转义 转化含义把原来 两个字符 : \和r转化为 \r 这样一个字符 没错
oeasy
2023/01/07
3.9K0
[oeasy]python0040_换行与回车的不同_通用换行符_universal_newlines
[oeasy]python053_学编程为什么从hello_world_开始
[趣味拓展]为什么学编程都要从hello_world_开始_HelloWorld的由来_程序员的浪漫 回忆上次内容
oeasy
2024/12/18
1160
[oeasy]python053_学编程为什么从hello_world_开始
[oeasy]python054_python有哪些关键字_keyword_list_列表_reserved_words
oeasy
2024/12/20
740
[oeasy]python054_python有哪些关键字_keyword_list_列表_reserved_words
[oeasy]教您玩转python - 0002 - 你好世界(hello world!)
蓝桥云课:oeasy 教您玩转 python_Python - 蓝桥云课 github:GitHub - overmind1980/oeasy-python-tutorial: 良心的 Python 教程,面向零基础初学者简明易懂的 Python3 入门基础课程。在linux+vim生产力环境下,从浅入深,从简单程序学到网络爬虫。可以配合蓝桥云上实验环境操作。 gitee:oeasy教您玩转python教程: 面向零基础初学者的简明易懂的 Python3 入门课程,对没有编程经验的同学也非常友好。在vim下从浅入深,逐步学习。从基础入门学习到爬虫。 作者:oeasy
oeasy
2022/09/29
1.4K0
[oeasy]教您玩转python - 0002 - 你好世界(hello world!)
[oeasy]python086方法_method_函数_function_区别
[oeasy]python086方法_method_函数_function_区别 回忆
oeasy
2025/04/10
810
[oeasy]python086方法_method_函数_function_区别
[oeasy]python0020换行字符_feed_line_lf_反斜杠n_B语言_安徒生童话
Basic Combined Programming Language(BCPL)
oeasy
2022/11/25
1.1K0
[oeasy]python0020换行字符_feed_line_lf_反斜杠n_B语言_安徒生童话
[oeasy]python055_python编程_容易出现的问题_函数名的重新赋值_print_int
055_python编程_容易出现的问题_函数名的重新赋值_print_int0 播放 · 0 赞同视频
oeasy
2024/12/29
1200
[oeasy]python055_python编程_容易出现的问题_函数名的重新赋值_print_int
[oeasy]python065python报错怎么办_try_试着来_except_发现异常
a = input("How many apples do you have:") weight = a * 2 print("You have ",weight, "kg apples.")
oeasy
2025/02/11
760
[oeasy]python065python报错怎么办_try_试着来_except_发现异常
[oeasy]python0072_修改字体前景颜色_foreground_color_font
修改颜色回忆上次内容m 可以改变字体样式 0-9 之间设置的都是字体效果0 重置为默认1 变亮2 变暗3 斜体4 下划线5 慢闪6 快闪7 前景背景互换8 隐藏9 中划线叠加效果 \33[1;3moeasy;分割取消效果 21 取消 122 取消 223 取消 3一直到 290 是全部取消,回到默认最后发现 真的可以 设置颜色???👁颜色是重要的不同颜色 可以提示出 信息重要性的级别颜色本身也是信息 OFF_INT = 2147483647ERROR_INT = 40000WARN_INT = 3000
oeasy
2023/02/03
9060
[oeasy]python0072_修改字体前景颜色_foreground_color_font
[oeasy]python0136_接收输入_input函数_字符串_str
添加输入提示 name = input("what is your name:")
oeasy
2023/04/22
4170
[oeasy]python0136_接收输入_input函数_字符串_str
[oeasy]python0144_try的完全体_否则_else_最终_finally
try的完全体 回忆上次内容 上次细化了主控程序(main.py) 导入(get_fruits.py)处理(process.py)输出(output.py)使用了 try 结构 tryexcept发现异常就报错输入部分的错误 应该在 输入部分来报具体怎么报呢?🤔完善输入 输入的时候 应该包括 对于输入内容的验证于是 再修改代码​添加图片注释,不超过 140 字(可选)输入代码 分成了 输入 a输入 b运行结果 如果 输入错误数据 会在get_fruits.py中报错​添加图片注释,不超过 140
oeasy
2023/04/30
1970
[oeasy]python0144_try的完全体_否则_else_最终_finally
[oeasy]python0032_ 火星文字幕_os_操作系统的作用_time_sleep_延迟
oeasy
2024/09/02
1000
[oeasy]python0032_ 火星文字幕_os_操作系统的作用_time_sleep_延迟
[oeasy]python035_根据序号得到字符_chr函数_字符_character_
oeasy
2024/09/23
1370
[oeasy]python035_根据序号得到字符_chr函数_字符_character_
推荐阅读
相关推荐
[oeasy]python069_当前作用域都有些什么_列表dir_函数_builtins
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验