• Twitter视频下载方式


    本文是传入Twitter视频播放链接通过http://twdown.net/网站获得Twitter视频的MP3,MP4下载链接用YouTube-dl下载Twitter视频

    #coding=utf-8
    import os
    import re
    import sys
    import time
    import datetime
    import requests
    # import pdfkit
    import hashlib
    from scrapy.http import Request, HtmlResponse
    from scrapy.selector import HtmlXPathSelector
    from pymongo import MongoClient
    import smtplib
    import urlparse
    import json
    import redis

    from gevent.pool import Pool
    from gevent import monkey
    monkey.patch_all()

    reload(sys)
    sys.setdefaultencoding('utf-8')

    def get_url(data):
           proxies={'https':'127.0.0.1:8123'}
           url = 'http://twdown.net/download.php/'
           print data
           # data = {
           # 'URL':'https://twitter.com/ciamemewarfare/status/839957301981220864'
           # }
           headers={
           'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
           'Accept-Encoding':'gzip, deflate',
           'Accept-Language':'zh-CN,zh;q=0.8',
           'Cache-Control':'max-age=0',
           'Content-Length':'73',
           'Content-Type':'application/x-www-form-urlencoded',
            # 'Cookie':'__cfduid=d5949cf9b7f7659555bf30bd1176139981497940317; td_cookie=18446744071807429655; _ga=GA1.2.2022387890.1497940226;     _gid=GA1.2.1592134325.1497940226; _gat=1',
            # 'Cookie':'__cfduid=d31e200302b2de7c45238b596be124e011497948038; td_cookie=18446744071812537626; _ga=GA1.2.347564219.1497947962; _gid=GA1.2.1008045576.1497947962; _gat=1',
            # 'Cookie':'__cfduid=d31e200302b2de7c45238b596be124e011497948038; td_cookie=18446744071812537626; _ga=GA1.2.347564219.1497947962; _gid=GA1.2.1008045576.1497947962; _gat=1',
            # 'Cookie':'__cfduid=d5949cf9b7f7659555bf30bd1176139981497940317; td_cookie=18446744071809053771; _ga=GA1.2.2022387890.1497940226; _gid=GA1.2.1592134325.1497940226; _gat=1',
            'Cookie':'__cfduid=d5949cf9b7f7659555bf30bd1176139981497940317; td_cookie=18446744071819015387; _ga=GA1.2.2022387890.1497940226; _gid=GA1.2.1592134325.1497940226',
            'Host':'twdown.net',
            'Origin':'http://twdown.net',
            'Proxy-Connection':'keep-alive',
            'Referer':'http://twdown.net/',
            'Upgrade-Insecure-Requests':'1',
            'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'
            }

            try_count = 10
            hxs = None
            while try_count:
                    print try_count
                    try:
                    #html = requests.get(url,headers=headers,proxies=proxies,verify=False).content
                    html = requests.post(url,headers=headers,proxies=proxies,data=data).content
                    response = HtmlResponse(url=url, body=html,encoding = 'utf-8')
                    # print response
                    hxs = HtmlXPathSelector(response)
                    break
            except Exception as e:
                    print e
                    time.sleep(2)
                    print try_count
                    try_count -= 1
                    return hxs,html
                    pass

    def get_download_url(p):# 通过http://twdown.net/,这个网站获得Twitter视频的MP3,MP4下载链接
                    link = 'http://twdown.net/'
                    temp = db_client.alex_movie.alex_movie_bytwitter.find_one({'_id':p})
                    title = temp['title']
                    url = temp['url']#链接
                    alex_id = temp['_id']
                    data = {}
                    data['URL'] = url
                    hxs,html = get_url(data)
                    # print html
                    mp4 = ''
                    mp3 = ''
                    download_list = hxs.select('//div[@class="col-md-8"]/table[@class="table table-condensed table-hover table-striped"]/tbody/tr')
                    for d_l in download_list:
                             d_l_td_a = d_l.select('./td/a')
                             for td_a in d_l_td_a:
                                       td_a_href = ''.join(td_a.select('./@href').extract()).strip()
                                       if '.mp4' in td_a_href:
                                                td_a_mp4 = td_a_href
                                                mp4 = td_a_mp4
                                                print td_a_mp4
                                                pass
                                       if 'mp3.' in td_a_href:
                                                td_a_mp3 = urlparse.urljoin(link,td_a_href)
                                                mp3 = td_a_mp3
                                                print td_a_mp3
                                                pass
                                       pass
                              pass
                    if not mp4 == '':
                            db_client.alex_movie.alex_movie_bytwitter.update({'_id':temp['_id']},{'$set':{'mp4_url':mp4,'is_download':True}})
                            pass
                    if not mp3 == '':
                            db_client.alex_movie.alex_movie_bytwitter.update({'_id':temp['_id']},{'$set':{'mp3_url':mp3,'is_download':True}})
                            pass
                    pass

    def download(p): # 用YouTube-dl下载视频实体
          movie_site = '/mnt/parastor/data/downdata/videos/usatoday_mp4/'
          temp = db_client.alex_movie.alex_movie_bytwitter.find_one({'_id':p})
          title = temp['title']#
          url = temp['url']#链接
          alex_id = temp['_id']
          video_path = os.path.join(movie_site,'%s.mp4'%alex_id.encode('utf-8'))
          try:
              re_num = 10
              while re_num:
                     # youtube-dl --proxy socks5://127.0.0.1:1080 https://www.youtube.com/watch?v=lokN6d1GaK4
                     youtube_content = 'youtube-dl --proxy socks5://127.0.0.1:1080 -i --no-check-certificate -o "%s" -R 20 "%s"'%(video_path,url)
                     # youtube_content = 'youtube-dl --proxy socks5://127.0.0.1:1080 -i -o "%s" -R 20 "%s" --get-url'%(video_path,url)
                     a = os.system(youtube_content.encode('utf-8'))
                     # print a
                     if a ==256:
                           print '错误'
                           if re_num == 1:
                                  db_client.alex_movie.alex_movie_bytwitter.update({'_id':temp['_id']},{'$set':{'is_download':False}})
                                  pass
                            pass
                     if a ==0:
                           print '成功'
                           db_client.alex_movie.alex_movie_bytwitter.update({'_id':temp['_id']},{'$set':{'is_mp4':True,'movie_download_site':video_path,'download_time':int(time.time())}})
                           break
                           pass
                      time.sleep(3)
                      re_num -= 1
                      pass
           except Exception, e:
                 print '....'
                 pass

    if __name__ == '__main__':
          db_client = MongoClient('192.168.86.136',27017)
          while True:
              result1 = db_client.alex_movie.alex_movie_bytwitter.find({'is_download':True,'mp3_url':{'$exists':False}}).limit(1)
              # r_num =len(result1)
              if result1:
                  print '------>ok'
                  for r_1 in result1:
                          p = r_1['_id']
                          db_client.alex_movie.alex_movie_bytwitter.update({'_id':p},{'$set':{'is_download':False}})
                          # download(p)
                          get_download_url(p)
                          pass
                  pass
              else:
                   break
                   pass
              pass
              db_client.close()

  • 相关阅读:
    深入理解Java8中Stream的实现原理
    RocketMQ的顺序消费和事务消费
    Java 性能调优小技巧
    类加载机制基础
    十大经典排序算法
    分布式锁的几种常用实现方式
    python之接口开发
    python之urllib模块和requests模块
    python之time模块和hashlib模块
    python之os和sys模块的区别
  • 原文地址:https://www.cnblogs.com/zhaobang/p/7106801.html
Copyright © 2020-2023  润新知