仅显示API响应的某些部分

时间:2017-07-24 21:32:13

标签: python api

这是我的第一个问题。

我正在使用YouTube Api v3来接收有关我频道的数据。

### START BOILERPLATE CODE

# Sample Python code for user authorization

import httplib2
import os
import sys

from apiclient.discovery import build
from apiclient.errors import HttpError
from oauth2client.client import flow_from_clientsecrets
from oauth2client.file import Storage
from oauth2client.tools import argparser, run_flow

# The CLIENT_SECRETS_FILE variable specifies the name of a file that contains
# the OAuth 2.0 information for this application, including its client_id and
# client_secret.
CLIENT_SECRETS_FILE = "client_secrets.json"

# This OAuth 2.0 access scope allows for full read/write access to the
# authenticated user's account and requires requests to use an SSL connection.
YOUTUBE_READ_WRITE_SSL_SCOPE = "https://www.googleapis.com/auth/youtube.force-ssl"
API_SERVICE_NAME = "youtube"
API_VERSION = "v3"

# This variable defines a message to display if the CLIENT_SECRETS_FILE is
# missing.
MISSING_CLIENT_SECRETS_MESSAGE = "WARNING: Please configure OAuth 2.0"


# Authorize the request and store authorization credentials.
def get_authenticated_service(args):
    flow = flow_from_clientsecrets(CLIENT_SECRETS_FILE, scope=YOUTUBE_READ_WRITE_SSL_SCOPE,
                                   message=MISSING_CLIENT_SECRETS_MESSAGE)

    storage = Storage("youtube-api-snippets-oauth2.json")
    credentials = storage.get()

    if credentials is None or credentials.invalid:
        credentials = run_flow(flow, storage, args)

    # Trusted testers can download this discovery document from the developers page
    # and it should be in the same directory with the code.
    return build(API_SERVICE_NAME, API_VERSION,
                 http=credentials.authorize(httplib2.Http()))


args = argparser.parse_args()
service = get_authenticated_service(args)


def print_results(results):
    print(results)


# Build a resource based on a list of properties given as key-value pairs.
# Leave properties with empty values out of the inserted resource.
def build_resource(properties):
    resource = {}
    for p in properties:
        # Given a key like "snippet.title", split into "snippet" and "title", where
        # "snippet" will be an object and "title" will be a property in that object.
        prop_array = p.split('.')
        ref = resource
        for pa in range(0, len(prop_array)):
            is_array = False
            key = prop_array[pa]
            # Convert a name like "snippet.tags[]" to snippet.tags, but handle
            # the value as an array.
            if key[-2:] == '[]':
                key = key[0:len(key) - 2:]
                is_array = True
            if pa == (len(prop_array) - 1):
                # Leave properties without values out of inserted resource.
                if properties[p]:
                    if is_array:
                        ref[key] = properties[p].split(',')
                    else:
                        ref[key] = properties[p]
            elif key not in ref:
                # For example, the property is "snippet.title", but the resource does
                # not yet have a "snippet" object. Create the snippet object here.
                # Setting "ref = ref[key]" means that in the next time through the
                # "for pa in range ..." loop, we will be setting a property in the
                # resource's "snippet" object.
                ref[key] = {}
                ref = ref[key]
            else:
                # For example, the property is "snippet.description", and the resource
                # already has a "snippet" object.
                ref = ref[key]
    return resource


# Remove keyword arguments that are not set
def remove_empty_kwargs(**kwargs):
    good_kwargs = {}
    if kwargs is not None:
        for key, value in kwargs.items():
            if value:
                good_kwargs[key] = value
    return good_kwargs


### END BOILERPLATE CODE

# Sample python code for channels.list

def channels_list_by_id(service, **kwargs):
    kwargs = remove_empty_kwargs(**kwargs)  # See full sample for function
    results = service.channels().list(
        **kwargs
    ).execute()


    print_results(results)


channels_list_by_id(service,
                    part='snippet,contentDetails,statistics',
                    id='UCipITl9sF0qOhCyx9CyoPGA')
input()

我试过这个

results[::-1]

要查看我是否可以修改响应,但它会给我一个错误。我想要做的只是展示我收到的所有信息中的某一部分。

{'etag': '"m2yskBQFythfE4irbTIeOgYYfBU/uRsDz3JQ7cr7yHa6kG9PmU3W5aI"', 'pageInfo': {'totalResults': 1, 'resultsPerPage': 1}, 'kind': 'youtube#channelListResponse', 'items': [{'etag': '"m2yskBQFythfE4irbTIeOgYYfBU/hYDFlzxsjtMVuq2c-B95Zu88agA"', 'contentDetails': {'relatedPlaylists': {'uploads': 'UUipITl9sF0qOhCyx9CyoPGA', 'watchLater': 'WL', 'watchHistory': 'HL', 'favorites': 'FLipITl9sF0qOhCyx9CyoPGA', 'likes': 'LLipITl9sF0qOhCyx9CyoPGA'}}, 'id': 'UCipITl9sF0qOhCyx9CyoPGA', 'statistics': {'commentCount': '0', 'viewCount': '1417504', 'hiddenSubscriberCount': False, 'videoCount': '354', 'subscriberCount': '12156'}, 'kind': 'youtube#channel', 'snippet': {'title': 'Trap Town', 'country': 'SE', 'publishedAt': '2013-10-20T10:33:50.000Z', 'thumbnails': {'high': {'url': 'https://yt3.ggpht.com/-4E1iRrrd_c8/AAAAAAAAAAI/AAAAAAAAAAA/cJeykUlKy8s/s240-c-k-no-mo-rj-c0xffffff/photo.jpg'}, 'medium': {'url': 'https://yt3.ggpht.com/-4E1iRrrd_c8/AAAAAAAAAAI/AAAAAAAAAAA/cJeykUlKy8s/s240-c-k-no-mo-rj-c0xffffff/photo.jpg'}, 'default': {'url': 'https://yt3.ggpht.com/-4E1iRrrd_c8/AAAAAAAAAAI/AAAAAAAAAAA/cJeykUlKy8s/s88-c-k-no-mo-rj-c0xffffff/photo.jpg'}}, 'localized': {'title': 'Trap Town', 'description': 'Trap Town, the best trap music out there.\n\nSubmissions: traptownsubmit@gmail.com'}, 'description': 'Trap Town, the best trap music out there.\n\nSubmissions: traptownsubmit@gmail.com', 'customUrl': 'traptownmusic'}}]}

这是我从YouTube获得的回复。现在我只希望它显示'subscriberCount': '12156'

有人知道如何删除除Subscounts以外的所有内容吗?

编辑: 我试过这个

myDict = {'etag': '"m2yskBQFythfE4irbTIeOgYYfBU/uRsDz3JQ7cr7yHa6kG9PmU3W5aI"', 'pageInfo': {'totalResults': 1, 'resultsPerPage': 1}, 'kind': 'youtube#channelListResponse', 'items': [{'etag': '"m2yskBQFythfE4irbTIeOgYYfBU/hYDFlzxsjtMVuq2c-B95Zu88agA"', 'contentDetails': {'relatedPlaylists': {'uploads': 'UUipITl9sF0qOhCyx9CyoPGA', 'watchLater': 'WL', 'watchHistory': 'HL', 'favorites': 'FLipITl9sF0qOhCyx9CyoPGA', 'likes': 'LLipITl9sF0qOhCyx9CyoPGA'}}, 'id': 'UCipITl9sF0qOhCyx9CyoPGA', 'statistics': {'commentCount': '0', 'viewCount': '1417504', 'hiddenSubscriberCount': False, 'videoCount': '354', 'subscriberCount': '12156'}, 'kind': 'youtube#channel', 'snippet': {'title': 'Trap Town', 'country': 'SE', 'publishedAt': '2013-10-20T10:33:50.000Z', 'thumbnails': {'high': {'url': 'https://yt3.ggpht.com/-4E1iRrrd_c8/AAAAAAAAAAI/AAAAAAAAAAA/cJeykUlKy8s/s240-c-k-no-mo-rj-c0xffffff/photo.jpg'}, 'medium': {'url': 'https://yt3.ggpht.com/-4E1iRrrd_c8/AAAAAAAAAAI/AAAAAAAAAAA/cJeykUlKy8s/s240-c-k-no-mo-rj-c0xffffff/photo.jpg'}, 'default': {'url': 'https://yt3.ggpht.com/-4E1iRrrd_c8/AAAAAAAAAAI/AAAAAAAAAAA/cJeykUlKy8s/s88-c-k-no-mo-rj-c0xffffff/photo.jpg'}}, 'localized': {'title': 'Trap Town', 'description': 'Trap Town, the best trap music out there.\n\nSubmissions: traptownsubmit@gmail.com'}, 'description': 'Trap Town, the best trap music out there.\n\nSubmissions: traptownsubmit@gmail.com', 'customUrl': 'traptownmusic'}}]}
    print(myDict['subscriberCount'])

但它给了我这个错误:print(myDict ['subscriberCount']) KeyError:'subscriberCount'

1 个答案:

答案 0 :(得分:0)

这样做了!

myDict = {'etag': '"m2yskBQFythfE4irbTIeOgYYfBU/uRsDz3JQ7cr7yHa6kG9PmU3W5aI"', 'pageInfo': {'totalResults': 1, 'resultsPerPage': 1}, 'kind': 'youtube#channelListResponse', 'items': [{'etag': '"m2yskBQFythfE4irbTIeOgYYfBU/hYDFlzxsjtMVuq2c-B95Zu88agA"', 'contentDetails': {'relatedPlaylists': {'uploads': 'UUipITl9sF0qOhCyx9CyoPGA', 'watchLater': 'WL', 'watchHistory': 'HL', 'favorites': 'FLipITl9sF0qOhCyx9CyoPGA', 'likes': 'LLipITl9sF0qOhCyx9CyoPGA'}}, 'id': 'UCipITl9sF0qOhCyx9CyoPGA', 'statistics': {'commentCount': '0', 'viewCount': '1417504', 'hiddenSubscriberCount': False, 'videoCount': '354', 'subscriberCount': '12156'}, 'kind': 'youtube#channel', 'snippet': {'title': 'Trap Town', 'country': 'SE', 'publishedAt': '2013-10-20T10:33:50.000Z', 'thumbnails': {'high': {'url': 'https://yt3.ggpht.com/-4E1iRrrd_c8/AAAAAAAAAAI/AAAAAAAAAAA/cJeykUlKy8s/s240-c-k-no-mo-rj-c0xffffff/photo.jpg'}, 'medium': {'url': 'https://yt3.ggpht.com/-4E1iRrrd_c8/AAAAAAAAAAI/AAAAAAAAAAA/cJeykUlKy8s/s240-c-k-no-mo-rj-c0xffffff/photo.jpg'}, 'default': {'url': 'https://yt3.ggpht.com/-4E1iRrrd_c8/AAAAAAAAAAI/AAAAAAAAAAA/cJeykUlKy8s/s88-c-k-no-mo-rj-c0xffffff/photo.jpg'}}, 'localized': {'title': 'Trap Town', 'description': 'Trap Town, the best trap music out there.\n\nSubmissions: traptownsubmit@gmail.com'}, 'description': 'Trap Town, the best trap music out there.\n\nSubmissions: traptownsubmit@gmail.com', 'customUrl': 'traptownmusic'}}]}
    print(myDict['items'][0]['statistics']['subscriberCount'])