Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从Pexels API下载视频?_Python_Api_Web - Fatal编程技术网

Python 如何从Pexels API下载视频?

Python 如何从Pexels API下载视频?,python,api,web,Python,Api,Web,我有这段代码可以从像素中提取图像,但我不知道如何将其更改为视频。我以前从未见过有人这样做,我非常感谢任何人的帮助。我试着把所有的照片标签都换成视频,但这似乎不起作用。我还尝试添加更多的库,但这似乎也不起作用 import argparse import json import os import time import requests import tqdm from pexels_api import API PEXELS_API_KEY = os.environ['PEXELS_KEY

我有这段代码可以从像素中提取图像,但我不知道如何将其更改为视频。我以前从未见过有人这样做,我非常感谢任何人的帮助。我试着把所有的照片标签都换成视频,但这似乎不起作用。我还尝试添加更多的库,但这似乎也不起作用

import argparse
import json
import os
import time

import requests
import tqdm
from pexels_api import API

PEXELS_API_KEY = os.environ['PEXELS_KEY']
MAX_IMAGES_PER_QUERY = 100
RESULTS_PER_PAGE = 10
PAGE_LIMIT = MAX_IMAGES_PER_QUERY / RESULTS_PER_PAGE


def get_sleep(t):
    def sleep():
        time.sleep(t)
    return sleep


def main(args):
    sleep = get_sleep(args.sleep)

    api = API(PEXELS_API_KEY)
    query = args.query

    page = 1
    counter = 0

    photos_dict = {}

    # Step 1: Getting urls and meta information
    while page <= PAGE_LIMIT:
        api.search(query, page=page, results_per_page=RESULTS_PER_PAGE)
        photos = api.get_entries()

        for photo in tqdm.tqdm(photos):
            photos_dict[photo.id] = vars(photo)['_Photo__photo']
            counter += 1

        if not api.has_next_page:
            break

        page += 1
        sleep()

    print(f"Finishing at page: {page}")
    print(f"Images were processed: {counter}")

    # Step 2: Downloading
    if photos_dict:
        os.makedirs(args.path, exist_ok=True)

        # Saving dict
        with open(os.path.join(args.path, f'{query}.json'), 'w') as fout:
            json.dump(photos_dict, fout)

        for val in tqdm.tqdm(photos_dict.values()):
            url = val['src'][args.resolution]
            fname = os.path.basename(val['src']['original'])
            image_path = os.path.join(args.path, fname)

            if not os.path.isfile(image_path):  # ignore if already downloaded
                response = requests.get(url, stream=True)

                with open(image_path, 'wb') as outfile:
                    outfile.write(response.content)
            else:
                print(f"File exists: {image_path}")


if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('--query', type=str, required=True)
    parser.add_argument('--path', type=str, default='./results_pexels')
    parser.add_argument('--resolution', choices=['original', 'large2x', 'large',
                                                 'medium', 'small', 'portrait',
                                                 'landscape', 'tiny'], default='original')
    parser.add_argument('--sleep', type=float, default=0.1)
    args = parser.parse_args()
    main(args)
import argparse
导入json
导入操作系统
导入时间
导入请求
导入TQM
从pexels_api导入api
PEXELS\u API\u KEY=os.environ['PEXELS\u KEY']
每个查询的最大图像数=100
每页的结果=10
页面限制=每个查询的最大图像数/每个页面的结果数
def获取睡眠(t):
def sleep():
时间。睡眠(t)
返回睡眠
def主(args):
sleep=获取睡眠(args.sleep)
api=api(PEXELS\u api\u键)
query=args.query
页码=1
计数器=0
照片_dict={}
#步骤1:获取URL和元信息

抱歉,我碰到了这个问题。在使用python API pexelsPy从Pexels下载视频时,我遇到了类似的情况。这可能会有帮助:

我检索了视频的ID,然后创建了具有以下结构的下载URL:
”https://www.pexels.com/video/“+ID+”/下载“

请参见以下示例:

def download_video(type_of_videos):

    video_tag = random.choice(type_of_videos)
    PEXELS_API = '-' #please add your API Key here
    api = API(PEXELS_API) 

    retrieved_videos = read_already_download_files('downloaded_files.txt')
    video_found_flag = True
    num_page = 1

    while video_found_flag:

        api.search_videos(video_tag, page=num_page, results_per_page=10)
        videos = api.get_videos()

        for data in videos:
            if data.width > data.height: #look for horizontal orientation videos
                if data.url not in retrieved_videos:
                    # write_file('downloaded_files.txt', data.url)
                    url_video = 'https://www.pexels.com/video/' + str(data.id) + '/download' #create the url with the video id
                    r = requests.get(url_video)
                    with open(data.url.split('/')[-2]+'.mp4', 'wb') as outfile:
                        outfile.write(r.content)
                    return data.url.split('/')[-2]+'.mp4' #download the video

        num_page += 1
download\u video
函数接受一组带有多个标记的字符串,例如:[“happy”、“sad”、“relax]。然后随机选择其中一个标签

PEXELS_API应该包含您的API密钥


读取已下载的文件('download\u files.txt')
:检索已下载的文件,检查当前找到的文件是否已下载。

找到解决方案了吗?您好,欢迎使用堆栈溢出!关于你的帖子如何回答这个问题,你能说得更具体一点吗?嗨,谢谢你的欢迎。当然可以。问:如何从Pexels API下载视频?答:我检索了视频的ID,然后创建了具有以下结构的下载URL:“ID+”/download“。然后我只需请求创建的URL并保存文件,即下载的视频。问候。@inou如果您能够描述函数的工作方式及其依赖关系,将对其他用户有所帮助。@jimiclapton,当然,完成了。