0

urllib2 を使用して URL を開いてビデオをダウンロードしているときに、奇妙な動作が発生します。

ビデオ リソースを開こうとしています。リンクの例を次に示します。

https://zencoder-temp-storage-us-east-1.s3.amazonaws.com/o/20130723/b3ed92cc582885e27cb5c8d8b51b9956/b740dc57c2a44ea2dc2d940d93d772e2.mp4?AWSAccessKeyId=AKIAI456JQ76GBU7FECA&Signature=S3lvi9n9kHbarCw%2FUKOknfpkkkY%3D&Expires=1374639361

次のコードがあります。

        mp4_url = ''
        #response_body is a json response that I get the mp4_url from
        if response_body['outputs'][0]['label'] == 'mp4':
            mp4_url = response_body['outputs'][0]['url']

        if mp4_url:
            logging.info('this is the mp4_url')
            logging.info(mp4_url)

            #if I add the line directly below this then it works just fine
            mp4_url = 'https://zencoder-temp-storage-us-east-1.s3.amazonaws.com/o/20130723/b3ed92cc582885e27cb5c8d8b51b9956/b740dc57c2a44ea2dc2d940d93d772e2.mp4?AWSAccessKeyId=AKIAI456JQ76GBU7FECA&Signature=S3lvi9n9kHbarCw%2FUKOknfpkkkY%3D&Expires=1374639361'

            mp4_video = urllib2.urlopen(mp4_url)
            logging.info('succesfully opened the url')

指定された行を追加するとコードは機能しますが、HTTP エラー 403: Forbidden メッセージが表示されます。しかし、紛らわしい部分は、mp4_url のログ行を確認すると、そこにハードコーディングしたものとまったく同じであるということです。違いは何ですか?それを混乱させる可能性のあるキャラクターがそこにいますか?私はそれを文字列に変換しようとしました:

mp4_video = urllib2.urlopen(str(mp4_url))

しかし、それは何もしませんでした。何か案は?

アップデート:

print repr(mp4_url) を使用するという提案で、それは私に与えています:

u'https://zencoder-temp-storage-us-east-1.s3.amazonaws.com/o/20130723/b3ed92cc582885e27cb5c8d8b51b9956/b740dc57c2a44ea2dc2d940d93d772e2.mp4?AWSAccessKeyId=AKIAI456JQ76GBU7FECA&Signature=S3lvi9n9kHbarCw%2FUKOknfpkkkY%3D&Expires=1374639361'

違いはエラーの原因だと思いますが、これを解析する最良の方法は何ですか?

更新 II:

結局、それを文字列にキャストする必要がありましたが、リンクを取得していたソース (エンコードされたビデオ) も、その URL を提供する前に 60 秒近くの遅延が必要だったので、ハードコーディングしても動作し続けました。それはその遅延があったからです。助けてくれてありがとう!

4

1 に答える 1