Support Kontakt Support | Systemstatus Systemstatus
Seiteninhalt

    Zugriffstoken erhalten

    In diesem Thema erfahren Sie, wie Sie Zugriffstoken erhalten und Strategien zur Implementierung dieser Logik in Ihren Apps aufzeigen.

    Ein Token erhalten

    Wenn Sie nur ein Zugriffstoken zum Testen einer API-Anfrage generieren möchten, können Sie dies verwenden Beispiel-App.

    Token werden von der Brightcove erhalten OAuth API. Bevor Sie Zugriffstoken erhalten können, müssen Sie zunächst Clientanmeldeinformationen (eine Client-ID und ein Clientgeheimnis) abrufen, die für die API und die Vorgänge spezifisch sind, auf die Sie zugreifen möchten. Um Ihre Client-Anmeldedaten zu erhalten, siehe API-Anmeldeinformationen verwalten.

    Sobald Sie Ihre Anmeldeinformationen haben, erhalten Sie ein Zugriffstoken, indem Sie a POST Anfrage zu:

      https://oauth.brightcove.com/v4/access_token

    Sie müssen die folgenden Header mit diesem Aufruf übergeben:

    • Content-Type: application/x-www-form-urlencoded
    • Authorization: Basic {client_id}:{client_secret}

    Die gesamte {client_id}:{client_secret} Die Zeichenfolge muss Base64-codiert sein (curl wird Base64 automatisch codieren, wenn Sie die Zeichenfolge übergeben) --user Referenzen; in anderen Sprachen müssen Sie selbst mit der Base64-Codierung umgehen).

    Sie müssen außerdem das folgende Schlüssel / Wert-Paar als Anfragetext oder als URL-Parameter senden:

      grant_type=client_credentials

    Die Antwort wird so aussehen (hier zur besseren Lesbarkeit schön gedruckt):

      {
          "access_token": "ANB7xKhiUZmwltVd3f1odcHHM9VAwg02kwmLwtZwHv3SxGCOWLUf5W4G7X22PRjmR9StvFUqzpVZ1suOfyfOigdi-rnohxyEaSSuZceeLw_9OBW7fXldOG05HEgkeK3N-DBZZZyilodmjA1JWZHbgI3IU7Rmz5IPGyi-sDxHN3KlOr1BDZlLZpXPdFPwEyb6idq-z8AL-blKTSMtNI3_fz3oNBisfrHGUv5tXHoQT4B7FYcvdrap16gTOO7_wNt1zmgLJiUHvyxZgsgBchm_AhohVL-AYgcfCbCR0v7d2hgI4ag35pnZNeujDiBLfnCFcVMlqQGq8UEVZrmU9a8y4pVAGih_EImmghqmSrkxLPYZ800-vIWX-lw",
          "token_type": "Bearer",
          "expires_in": 300
      }

    Das access_token Wert ist, was Sie in einem übergeben müssen Authorization Header mit Ihrem API-Aufruf in dieser Form:

      Authorization: Bearer {access_token}

    Das expires_in Wert ist die Anzahl der Sekunden, für die das Zugriffstoken gültig ist.

    Implementierungsstrategien

    Wenn Ihre App nur sporadisch die Brightcove-APIs aufruft, können Sie dies auch ignorieren expires_in Parameter und holen Sie einfach ein neues Zugriffs-Token für jeden Anruf. In diesem Fall sieht die Verarbeitungssequenz wie folgt aus:

    Holen Sie sich ein neues Token
    Holen Sie sich ein neues Token

    Wenn Sie andererseits wissen, dass Ihre App häufig viele API-Aufrufe in schneller Folge ausführt (z. B. lange Berichte generiert), ist es effizienter, Zugriffstoken nur dann abzurufen, wenn Sie sie benötigen. Es gibt zwei grundlegende Möglichkeiten, dies zu tun:

    1. Probieren Sie den API-Aufruf und wenn Sie ein UNAUTHORIZED Fehler in der Antwort, holen Sie ein neues Token und führen Sie den API-Aufruf erneut aus. In diesem Fall sieht die Verarbeitungssequenz wie folgt aus:
      Erhalte Token mit der Funktion "Auf Anruf überprüfen"
      Erhalte Token mit der Funktion "Auf Anruf überprüfen"
    2. Ein anderer Ansatz wäre das Hinzufügen der expires_in Bei jedem Abruf eines Tokens und bei späteren API-Aufrufen überprüfen Sie die Gültigkeitsdauer in Abhängigkeit von der aktuellen Uhrzeit, um festzustellen, ob Sie ein neues Token abrufen müssen. In diesem Fall sieht Ihre Verarbeitungssequenz wie folgt aus:
      Holen Sie Token mit Check for Expiration
      Holen Sie Token mit Check for Expiration

    Postbote und Schlaflosigkeit

    Für die Zusammenarbeit mit dem Brightcove OAuth-System können mehrere nützliche Testtools für REST-APIs eingerichtet werden, um Zugriffstoken zu erhalten. Wir haben Anleitungen, die Schritte dazu für zwei der beliebtesten plattformübergreifenden Tools enthalten:

    Codebeispiele

    Hier finden Sie einige Codebeispiele, die Ihnen den Einstieg erleichtern.

    Shell-Skript Beispiel

    Das erste Beispiel ist ein Shell-Skript, das die erste Implementierungslogik oben implementiert: Es nimmt Eingaben vom Benutzer entgegen, erhält immer ein neues Token und führt dann den API-Aufruf durch. Das Skript funktioniert mit allen Brightcove-APIs und ist möglicherweise nützlich, um API-Aufrufe beim Erstellen Ihrer App zu testen.

    Shell-Skriptcode

      bold=`tput bold`
      normal=`tput sgr0`
      echo 'Enter your client id:'
      read CLIENT_ID
      echo Your client id: $CLIENT_ID
      echo --------------------------
      echo 'Enter your client secret:'
      read CLIENT_SECRET
      echo Your client secret: $CLIENT_SECRET
      echo --------------------------
      echo 'Enter the full API call:'
      read API_CALL
      echo Your API call: $API_CALL
      echo --------------------------
      echo "Enter the HTTP method: [ ${bold}g${normal} (GET - default) | ${bold}po${normal} (POST) | ${bold}pa${normal} (PATCH) | ${bold}pu${normal} (PUT) | ${bold}d${normal} (DELETE) ]:"
      read VERB
      if [ "$VERB" = "" ]
          then
          export VERB="GET"
      elif [ "$VERB" = "g" ] || [ "$VERB" = "GET" ] || [ "$VERB" = "get" ]
          then
          export VERB="GET"
      elif [ "$VERB" = "po" ] || [ "$VERB" = "p" ] || [ "$VERB" = "POST" ] || [ "$VERB" = "post" ]
          then
          export VERB="POST"
      elif [ "$VERB" = "pa" ] || [ "$VERB" = "PATCH" ] || [ "$VERB" = "patch" ]
          then
          export VERB="PATCH"
      elif [ "$VERB" = "pu" ] || [ "$VERB" = "PUT" ] || [ "$VERB" = "put" ]
          then
          export VERB="PUT"
      elif [ "$VERB" = "d" ] || [ "$VERB" = "DELETE" ] || [ "$VERB" = "delete" ]
          then
          export VERB="DELETE"
      fi
      echo "Your request type: $VERB"
      echo --------------------------
      echo 'Enter data to be submitted in the request body:'
      read DATA
      echo Your call verb: $DATA
      echo --------------------------
      # get access token and use regex to extract it from the response
      TOKEN=$(curl -s --data "grant_type=client_credentials" https://oauth.brightcove.com/v4/access_token --header "Content-Type: application/x-www-form-urlencoded" --user "$CLIENT_ID:$CLIENT_SECRET" | sed -E 's/.*access_token\"\:\"([^\"]+)\".*/\1/');
      echo Your token: $TOKEN
      echo --------------------------
      RESPONSE=$(curl -s -v -X $VERB "$API_CALL" -d "$DATA" -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json")
      echo Raw response:
      echo $RESPONSE
      echo --------------------------
      echo Pretty-printed response:
      echo $RESPONSE | python -m json.tool
      echo
      

    Ruby Beispiel

    Das nächste Beispiel ist ein Ruby-Skript, das auch die erste Implementierungslogik verwendet: Holen Sie immer ein Token und führen Sie dann den API-Aufruf aus. In diesem Beispiel wird ein Anruf an die Analytics API, kann aber angepasst werden, um mit einer der APIs zu arbeiten.

    Ruby-Code

      #!/usr/bin/env ruby
      # view id --> content,
      #!/usr/bin/env ruby
      require 'rest-client'
      require 'json'
      client_id = '5eb0f20e-29a8-4f19-8cb5-80336e2789ab'
      client_secret = 'Zqpb_2YrvnGUEjqQUndx6GsjQ3JyAgXoA2gNbhoj-yUV4scij0jwCN0OBz9FILEwHupjeqwdbOUSFMi7zkhpVg'
      response = RestClient.post 'https://oauth.brightcove.com/v4/access_token', :client_id=>client_id,:client_secret=>client_secret,:grant_type=>'client_credentials'
      token = JSON.parse(response)["access_token"]
      puts "The extracted token is:" + token + "\n\n\n"
      data = RestClient.get 'https://data.brightcove.com/analytics-api/videocloud/account/1234567890001/report?dimensions=video&from=2014-01-01&to=2014-03-30', { 'Authorization' => "Bearer #{token}", 'Accept' => 'application/json' }
      puts "This is the result from the query: \n" + data
      

    Python Beispiel

    Dieses Beispiel ist ein Python-Skript, das die obige 3rd-Implementierungslogik implementiert. Es versucht zu machen Analytics API Wenn der Aufruf bei einem UNAUTHORIZED-Fehler fehlschlägt, ruft er ein neues Zugriffstoken ab und versucht den Anruf erneut.

    Dieses Skript liest auch die Client-Anmeldeinformationen aus einer externen Datei - die Anmeldeinformationsdatei wird unter dem Python-Code angezeigt.

    Python-Code

      import httplib, urllib, base64, json, sys
      # This is a python script to test the CMS API.
      # To use this script, edit the configuration file brightcove_oauth.txt
      # with your brightcove account ID, and a client ID and client secret for
      # an Oauth credential that has CMS API - Videos Read permission.
      # You can find instructions on how to generate Oauth credentials
      # http://docs.brightcove.com/en/video-cloud/cms-api/getting-started/quick-start-cms.html
      # This script demonstrates how to refresh the access token
      # in handling 401 - Unauthorized errors from the CMS API
      # Because the Oauth tokens have a 300 second time to live,
      # The refresh logic to handle 401 errors will be a normal part of runtime behavior.
      # Note that the client_id and client_secret secure the access to the CMS API
      # Therefore, it is not advisable to expose them to browsers. These are meant for
      # server to server communication to obtain an access token.
      # The access token can be exposed to the browser. Its limited permissions and expiry
      # time make limit the duration and scope of its usage should it be observed in network
      # traffic or obtained from a browser.
      class AuthError(Exception):
      def __init__(self):
      self.msg = "auth error"
      # read the oauth secrets and account ID from a configuration file
      def loadSecret():
      # read the s3 creds from json file
      try:
              credsFile=open('brightcove_oauth.txt')
              creds = json.load(credsFile)
      return creds
      except Exception, e:
      print "Error loading oauth secret from local file called 'brightcove_oauth.txt'"
      print "\tThere should be a local file in this directory called brightcove_oauth.txt "
      print "\tWhich has contents like this:"
      print """
      
          {
              "account_id": "1234567890001",
          "client_id": "30ff0909-0909-33d3-ae88-c9887777a7b7",
          "client_secret": "mzKKjZZyeW5YgsdfBD37c5730g397agU35-Dsgeox6-73giehbeihgleh659dhgjhdegessDge0s0ynegg987t0996nQ"
          }
      
          """
          sys.exit("System error: " + str(e) );
      # get the oauth 2.0 token
      def getAuthToken(creds):
          conn = httplib.HTTPSConnection("oauth.brightcove.com")
          url =  "/v4/access_token"
          params = {
      "grant_type": "client_credentials"
          }
          client = creds["client_id"];
          client_secret = creds["client_secret"];
          authString = base64.encodestring('%s:%s' % (client, client_secret)).replace('\n', '')
          requestUrl = url + "?" + urllib.urlencode(params)
          headersMap = {
      "Content-Type": "application/x-www-form-urlencoded",
      "Authorization": "Basic " + authString
          };
          conn.request("POST", requestUrl, headers=headersMap)
          response = conn.getresponse()
      if response.status == 200:
              data = response.read()
              result = json.loads( data )
      return result["access_token"]
      # call Analytics API for video views in the last 30 days
      def getVideoViews( token , account ):
          conn = httplib.HTTPSConnection("data.brightcove.com")
          url =  "/analytics-api/videocloud/account/" + account + "/report/"
          params = {
      "dimensions": "video",
      "limit": "10",
      "sort": "video_view",
      "fields": "video,video_name,video_view",
      "format": "json"
          }
          requestUrl = url + "?" + urllib.urlencode(params)
          headersMap = {
      "Authorization": "Bearer " + token
          };
          conn.request("POST", requestUrl, headers=headersMap)
          response = conn.getresponse()
      if response.status == 200:
              data = response.read()
              result = json.loads( data )
      return result
      elif response.status == 401:
      # if we get a 401 it is most likely because the token is expired.
      raise AuthError
      else:
      raise Exception('API_CALL_ERROR' + " error " + str(response.status) )
      # call CMS API to return the number of videos in the catalog
      def getVideos( token , account ):
          conn = httplib.HTTPSConnection("cms.api.brightcove.com")
          url =  "/v1/accounts/" + account + "/counts/videos/"
          requestUrl = url
      print "GET " + requestUrl
          headersMap = {
      "Authorization": "Bearer " + token
          };
          conn.request("GET", requestUrl, headers=headersMap)
          response = conn.getresponse()
      if response.status == 200:
              data = response.read()
              result = json.loads( data )
      return result
      elif response.status == 401:
      # if we get a 401 it is most likely because the token is expired.
      raise AuthError
      else:
      raise Exception('API_CALL_ERROR' + " error " + str(response.status) )
      def demo():
          creds = loadSecret()
          token = getAuthToken(creds)
          account = creds["account"];
      try:
              results = getVideos( token , account )
      except AuthError, e:
      # handle an auth error by re-fetching a auth token again
              token = getAuthToken(creds)
              results = getVideoViews( token , account )
      # print the videos
      print results
      if __name__ == "__main__":
        demo();
      
    Berechtigungsdatei für Python-Beispiel
      {
          "account" : "1234567890001",
          "client_id": "30ff0909-0909-33d3-ae88-c9887777a7b7",
          "client_secret": "XXXXXXXX_XXXXXXXX_XXXXXXXX_XXXXXXX_XXXXXXX_XXXXXXXXXXXXXXXXX_XXXXXXXXXXX"
      }

    PHP Beispiel

    Dies ist ein einfacher Proxy, der Client-Anmeldeinformationen und einen API-Aufruf annimmt, ein Zugriffstoken abruft, die API-Anforderung anfordert und die Ergebnisse an den Client zurückgibt.

    PHP-Code

      <?php
      /**
       * proxy for Brightcove RESTful APIs
       * gets an access token, makes the request, and returns the response
       *
       * Method: POST
       * include header: "Content-Type", "application/x-www-form-urlencoded"
       *
       * @post {string} url - the URL for the API request
       * @post {string} [requestType=GET] - HTTP method for the request
       * @post {string} [requestBody=null] - JSON data to be sent with write requests
       *
       * @returns {string} $response - JSON response received from the API
       */
      // CORS enablement
      header("Access-Control-Allow-Origin: *");
      // set up request for access token
      $data = array();
      $client_id     = ‘YOUR_CLIENT_ID’;
      $client_secret = ‘YOUR_CLIENT_SECRET’;
      $auth_string   = "{$client_id}:{$client_secret}";
      $request       = "https://oauth.brightcove.com/v4/access_token?grant_type=client_credentials";
      $ch            = curl_init($request);
      curl_setopt_array($ch, array(
        CURLOPT_POST           => TRUE,
        CURLOPT_RETURNTRANSFER => TRUE,
        CURLOPT_SSL_VERIFYPEER => FALSE,
        CURLOPT_USERPWD        => $auth_string,
        CURLOPT_HTTPHEADER     => array(
          'Content-type: application/x-www-form-urlencoded',
        ),
        CURLOPT_POSTFIELDS => $data
      ));
      $response = curl_exec($ch);
      curl_close($ch);
      // Check for errors
      if ($response === FALSE) {
        die(curl_error($ch));
      }
      // Decode the response
      $responseData = json_decode($response, TRUE);
      $access_token = $responseData["access_token"];
      // set up the API call
      // get data
      if ($_POST["requestBody"]) {
        $data = json_decode($_POST["requestBody"]);
      } else {
        $data = array();
      }
      // get request type or default to GET
      if ($_POST["requestType"]) {
        $method = $_POST["requestType"];
      } else {
        $method = "GET";
      }
      // get the URL and authorization info from the form data
      $request = $_POST["url"];
      //send the http request
      $ch = curl_init($request);
      curl_setopt_array($ch, array(
          CURLOPT_CUSTOMREQUEST  => $method,
          CURLOPT_RETURNTRANSFER => TRUE,
          CURLOPT_SSL_VERIFYPEER => FALSE,
          CURLOPT_HTTPHEADER     => array(
            'Content-type: application/json',
            "Authorization: Bearer {$access_token}",
          ),
          CURLOPT_POSTFIELDS => json_encode($data)
        ));
      $response = curl_exec($ch);
      curl_close($ch);
      // Check for errors
      if ($response === FALSE) {
        $logEntry = "\nError:\n".
        "\n".date("Y-m-d H:i:s")." UTC \n"
        .$response;
        $logFileLocation = "log.txt";
        $fileHandle      = fopen($logFileLocation, 'a') or die("-1");
        fwrite($fileHandle, $logEntry);
        fclose($fileHandle);
        echo "Error: there was a problem with your API call"+
        die(curl_error($ch));
      }
      // Decode the response
      // $responseData = json_decode($response, TRUE);
      // return the response to the AJAX caller
      echo $response;
      ?>
      

    Powershell-Beispiel

      $ParentPath = "C:\Temp"
      $ParentCsv = "$ParentPath\Videos.csv"
      
      
      
      Clear-Host
      
      
      
      <#
          .SYNOPSIS
              Retrieves the TokenType and AccessToken from Brightcove.
      
          .DESCRIPTION
              Uses the Brightcove API to retrieve TokenType and AccessToken for use in later
              API requests. The AccessToken expires after 300 seconds (5 minutes) and a new
              AccessToken will need to be requested.
      #>
      function Get-BrightcoveAuthorization
      {
          # /oauth/getting-started/overview-oauth-api-v4.html
      
          $Uri = "https://oauth.brightcove.com/v4/access_token"
      
          $ClientId = "" # <--------------------------------------------------------------------Retrieve from Brightcove and paste here
          $ClientSecret = "" # <----------------------------------------------------------------Retrieve from Brightcove and paste here
          $Authorization = [System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes($ClientId + ":" + $ClientSecret))
      
          $Headers = @{
            "Authorization" = "Basic " + $Authorization;
            "Content-Type" = "application/x-www-form-urlencoded";
          }
      
          Invoke-RestMethod -Method "Post" -Uri $Uri -Body "grant_type=client_credentials" -Headers $Headers
      }
      
      
      
      <#
          .SYNOPSIS
              Retrieves a count of videos available for a Brightcove Video Cloud account.
      
          .DESCRIPTION
              Uses the Brightcove API to retrieve the count of videos.
      
          .PARAMETER TokenType
              Required. The token type as retrieved from Brightcove's authorization API.
      
          .PARAMETER AccessToken
              Required. The access toke as retrieved from Brightcove's authorization API.
      #>
      function Get-BrightcoveVideoCount
      {
          # https://support.brightcove.com/getting-counts-videos-and-playlists
      
          param(
              [parameter(Mandatory=$true)]
              [string]
              $TokenType,
      
              [parameter(Mandatory=$true)]
              [string]
              $AccessToken
          )
      
          $Uri = "https://cms.api.brightcove.com/v1/accounts/1044238710001/counts/videos"
      
          $Headers = @{
            "Authorization" = "$TokenType $AccessToken";
          }
      
          (Invoke-RestMethod -Method "Get" -Uri $Uri -Headers $Headers).count
      }
      
      
      
      <#
          .SYNOPSIS
              Retrieves a list of videos available for a Brightcove Video Cloud account.
      
          .DESCRIPTION
              Uses the Brightcove API to retrieve the information for a list of videos, paged
              up to a specified Limit and starting ad a specified Offset.
      
          .PARAMETER TokenType
              Required. The token type as retrieved from Brightcove's authorization API.
      
          .PARAMETER AccessToken
              Required. The access toke as retrieved from Brightcove's authorization API.
      
          .PARAMETER Limit
              Optional. Number of videos to return - must be an integer between 1 and 100.
              Default: 20
      
          .PARAMETER Offset
              Optional. Number of videos to skip (for paging results). Must be a positive integer.
              Default: 0
      #>
      function Get-BrightcoveVideos
      {
          # https://support.brightcove.com/overview-cms-api
          # https://support.brightcove.com/using-cms-api-retrieve-video-data#bc-ipnav-1
          # https://support.brightcove.com/cmsplayback-api-videos-search
      
          param(
              [parameter(Mandatory=$true)]
              [string]
              $TokenType,
      
              [parameter(Mandatory=$true)]
              [string]
              $AccessToken,
      
              [ValidateRange(1, 100)]
              [int]
              $Limit = 20,
      
              [ValidateRange(0, [int]::MaxValue)]
              [int]
              $Offset = 0
          )
      
          $Uri = "https://cms.api.brightcove.com/v1/accounts/1044238710001/videos"
      
          if ($Limit)
          {
              $Uri += "?limit=$Limit"
          }
      
          if ($Offset -and $Offset -ne 0)
          {
              if ($Limit)
              {
                  $Uri += "&offset=$Offset"
              }
              else
              {
                  $Uri += "?offset=$Offset"
              }
          }
      
          $Headers = @{
            "Authorization" = "$TokenType $AccessToken";
          }
      
          Invoke-RestMethod -Method "Get" -Uri $Uri -Headers $Headers
      }
      
      
      
      <#
          .SYNOPSIS
              Retrieves a list of sources available for a Brightcove video.
      
          .DESCRIPTION
              Uses the Brightcove API to retrieve the list of video file sources for a
              specific video.
      
          .PARAMETER TokenType
              Required. The token type as retrieved from Brightcove's authorization API.
      
          .PARAMETER AccessToken
              Required. The access toke as retrieved from Brightcove's authorization API.
      
          .PARAMETER VideoId
              Required. ID of the video to get information for. This can be obtained using
              the Get-BrightcoveVideos function or Brightcove's website.
      #>
      function Get-BrightcoveVideoSources
      {
          # https://support.brightcove.com/using-cms-api-retrieve-video-data#bc-ipnav-3
      
          param(
              [parameter(Mandatory=$true)]
              [string]
              $TokenType,
      
              [parameter(Mandatory=$true)]
              [string]
              $AccessToken,
      
              [parameter(Mandatory=$true)]
              [string]
              $VideoId
          )
      
          $Uri = "https://cms.api.brightcove.com/v1/accounts/1044238710001/videos/$VideoId/sources"
      
          $Headers = @{
            "Authorization" = "$TokenType $AccessToken";
          }
      
          Invoke-RestMethod -Method "Get" -Uri $Uri -Headers $Headers
      }
      
      
      
      <#
          .SYNOPSIS
              Retrieves a list of images associated with a Brightcove video.
      
          .DESCRIPTION
              Uses the Brightcove API to retrieve the information of the thumbnail and poster
              for a specific video.
      
          .PARAMETER TokenType
              Required. The token type as retrieved from Brightcove's authorization API.
      
          .PARAMETER AccessToken
              Required. The access toke as retrieved from Brightcove's authorization API.
      
          .PARAMETER VideoId
              Required. ID of the video to get information for. This can be obtained using
              the Get-BrightcoveVideos function or Brightcove's website.
      #>
      function Get-BrightcoveVideoImages
      {
          # https://support.brightcove.com/using-cms-api-retrieve-video-data#bc-ipnav-4
      
          param(
              [parameter(Mandatory=$true)]
              [string]
              $TokenType,
      
              [parameter(Mandatory=$true)]
              [string]
              $AccessToken,
      
              [parameter(Mandatory=$true)]
              [string]
              $VideoId
          )
      
          $Uri = "https://cms.api.brightcove.com/v1/accounts/1044238710001/videos/$VideoId/images"
      
          $Headers = @{
            "Authorization" = "$TokenType $AccessToken";
          }
      
          Invoke-RestMethod -Method "Get" -Uri $Uri -Headers $Headers
      }
      
      
      
      <#
          .SYNOPSIS
              Downloads a file from the web.
      
          .DESCRIPTION
              Uses the BITS to retrieve a file from a given URI.
      
          .PARAMETER Path
              Required. The folder path to save the file to. The filename will be determined
              by the URI.
      
          .PARAMETER Uri
              Required. The URI for the location of the file on the web. This will be used to
              determine the filename of the file.
      
          .PARAMETER DisplayName
              Optional. This is what will be displayed at the top of the progress bar.
      #>
      function Start-BrightcoveDownload
      {
          param(
              [parameter(Mandatory=$true)]
              [string]
              $Path,
      
              [parameter(Mandatory=$true)]
              [string]
              $Uri,
      
              [string]
              $DisplayName
          )
      
          $FileName = (($Uri -split "/")[-1] -split "\?")[0]
      
          if ([string]::IsNullOrWhiteSpace($DisplayName))
          {
              $DisplayName = "Downloading file..."
          }
      
          Start-BitsTransfer -Source $Uri -Destination "$Path\$FileName" -DisplayName $DisplayName -Description $FileName
      }
      
      
      
      <#
          .SYNOPSIS
              Replaces invalid characters from a filename.
      
          .DESCRIPTION
              Replaces the invalid characters in a filename with an underscore (_).
      
          .PARAMETER Name
              Required. Filename to have the invalid characters removed from.
      #>
      function Replace-InvalidFileNameChars {
          param(
              [Parameter(Mandatory=$true)]
              [String]$Name
          )
      
          $InvalidFileNameChars = [IO.Path]::GetInvalidFileNameChars() -join ''
          $Replace = "[{0}]" -f [RegEx]::Escape($InvalidFileNameChars)
      
          return ($Name -replace $Replace, "_")
      }
      
      
      
      
      
      
      
      # Get AccessToken for API
      "Getting AccessToken for API..."
      $BrightcoveAuthorization = Get-BrightcoveAuthorization
      
      $AccessToken = $BrightcoveAuthorization.access_token
      $AccessTokenExpiresIn = $BrightcoveAuthorization.expires_in #seconds (300)
      $TokenType = $BrightcoveAuthorization.token_type
      
      $AccessTokenExpiry = (Get-Date) + (New-TimeSpan -Seconds $AccessTokenExpiresIn)
      
      
      
      # Get count of available videos
      "Getting count of available videos..."
      $BrightcoveVideoCount = Get-BrightcoveVideoCount -AccessToken $AccessToken -TokenType $TokenType
      
      
      
      # Get list of all videos 20 at a time
      "Getting list of all videos..."
      $BrightcoveVideos = @()
      for ($i = 0; $i -lt $BrightcoveVideoCount; $i += 20) {
          $BrightcoveVideos += Get-BrightcoveVideos -AccessToken $AccessToken -TokenType $TokenType -Offset $i
      }
      
      
      
      # Parse videos and download information, video, and thumbnail files
      "Parsing videos and downloading information, video, and thumbnail files..."
      foreach ($BrightcoveVideo in $BrightcoveVideos)
      {
          $Thumbnail = ""
          $Poster = ""
      
          $Video = [pscustomobject][ordered]@{
              Id = $BrightcoveVideo.id
              Complete = $BrightcoveVideo.complete
              CreatedAt = $BrightcoveVideo.created_at
              Duration = $BrightcoveVideo.duration
              Name = $BrightcoveVideo.name
              OriginalFileName = $BrightcoveVideo.original_filename
              PublishedAt = $BrightcoveVideo.published_at
              State = $BrightcoveVideo.state
              Tags = $BrightcoveVideo.tags -join ","
              UpdatedAt = $BrightcoveVideo.updated_at
          }
      
          $VideoName = $Video.Name
          $PathFriendlyVideoName = Replace-InvalidFileNameChars -Name $VideoName
      
          $Path = "$ParentPath\$PathFriendlyVideoName"
      
          # Get new AccessToken if expired
          if ((Get-Date) -gt $AccessTokenExpiry)
          {
              $BrightcoveAuthorization = Get-BrightcoveAuthorization
      
              $AccessToken = $BrightcoveAuthorization.access_token
              $AccessTokenExpiresIn = $BrightcoveAuthorization.expires_in #seconds (300)
              $TokenType = $BrightcoveAuthorization.token_type
      
              $AccessTokenExpiry = (Get-Date) + (New-TimeSpan -Seconds $AccessTokenExpiresIn)
          }
      
          # Get list of rendition sources for video and select last MP4, sorted by width
          $BrightcoveVideoSources = Get-BrightcoveVideoSources -AccessToken $AccessToken -TokenType $TokenType -VideoId $Video.Id
          $Source = $BrightcoveVideoSources | where -Property "container" -EQ -Value "MP4" | sort -Property width | select -Last 1
          $SourceUri = $Source.src
      
          # Get list of images for video
          $BrightcoveVideoImages = Get-BrightcoveVideoImages -AccessToken $AccessToken -TokenType $TokenType -VideoId $Video.Id
          $Thumbnail = $BrightcoveVideoImages.thumbnail
          $ThumbnailUri = $Thumbnail.src
          $Poster = $BrightcoveVideoImages.poster
          $PosterUri = $Poster.src
      
          # Create video download folder
          if (-not (Test-Path $Path))
          {
              New-Item -Path $Path -ItemType Directory |
                  Out-Null
          }
      
          # Append video information to parent CSV
          $Video |
              Export-Csv -Path $ParentCsv -NoTypeInformation -Append
      
          # Write video inforamtion to video CSV
          $Video |
              Export-Csv -Path "$Path\$PathFriendlyVideoName.csv" -NoTypeInformation
      
          # Download video thumbnail
          if (-not [string]::IsNullOrWhiteSpace($ThumbnailUri))
          {
              Start-BrightcoveDownload -Path $Path -Uri $ThumbnailUri -DisplayName "Downloading thumbnail for $VideoName"
          }
      
          # Download video poster
          if (-not [string]::IsNullOrWhiteSpace($PosterUri))
          {
              Start-BrightcoveDownload -Path $Path -Uri $PosterUri -DisplayName "Downloading poster for $VideoName"
          }
      
          # Download video file
          if (-not [string]::IsNullOrWhiteSpace($PosterUri))
          {
              Start-BrightcoveDownload -Path $Path -Uri $SourceUri -DisplayName "Downloading video for $VideoName"
          }
      }
      
      
      
      "\n"
      "Finished downloading files. Look for the list of videos in a CSV file at the root of "
      "the parent path. Each video is downloaded to its own separate folder along with its "
      "own CSV and image files."
      Explorer.exe $ParentPath
      

    Seite zuletzt aktualisiert am 29