6

iCloud ファイルの公開 URL を生成できます。例: https://www.icloud.com/documents/dl/?p=3&t=BAKsXkcDP-p8sdTS8NgBLWRQxE281oe4hogA

ブラウザからこのような URL にアクセスすると、ランディング ページが表示され、すぐにファイルが自動的にダウンロードされます。罰金。

ただし、このファイルを iOS アプリ (NSURLConnection を使用) からダウンロードできるようにしたいと考えています。これどうやってするの?たぶん... a) HTMLヘッダーを処理して、何らかの方法で直接URLを決定しますか? b) ブラウザーでダウンロードをトリガーするリダイレクト/更新をインターセプトしますか? c) ダウンロードをトリガーするためにブラウザを模倣しますか?

ありがとう

PS。ばかの答えを教えてください-私はhtmlなどについて無知です.

上記の間接 URL に対して取得した html 応答は次のとおりです。

var SC_benchmarkPreloadEvents={headStart:new Date().getTime()}; -->iCloud - 読み込み中 ...window.SC=window.SC||{MODULE_INFO:{},LAZY_INSTANTIATION:{}};SC.buildMode="production"; SC.buildNumber="1FCS22.32292";SC.buildLocale="en-us";String.preferredLanguage="en-us";window.SC=window.SC||{MODULE_INFO:{},LAZY_INSTANTIATION:{}} ;SC._detectBrowser=function(userAgent,language){var version,webkitVersion,browser={}; userAgent=(userAgent||navigator.userAgent).toLowerCase();language=language||navigator.language||navigator.browserLanguage; version=browser.version=(userAgent.match(/.*(?:rv|chrome|webkit|opera|ie)/: ([ );]|$)/)||[])[1]; webkitVersion=(userAgent.match(/webkit/(.+?) /)||[])[1];browser.windows=browser.isWindows=!!/windows/.test(userAgent); browser.mac=browser.isMac=!!/macintosh/. test(userAgent)||(/mac os x/.test(userAgent)&&!/like mac os x/.test(userAgent)); browser.lion=browser.isLion=!!(/mac os x 10_7/.test(userAgent)&&!/like mac os x 10_7/.test(userAgent)); browser.iPhone=browser.isiPhone=!!/iphone/.test(userAgent);browser.iPod=browser.isiPod=!!/ipod/.test(userAgent); browser.iPad=browser.isiPad=!!/ipad/.test(userAgent);browser.iOS=browser.isiOS=browser.iPhone||browser.iPod||browser.iPad; browser.android=browser.isAndroid=!!/android/.test(userAgent);browser.opera=/opera/.test(userAgent)?version:0; browser.isOpera=!!browser.opera;browser.msie=/msie/.test(userAgent)&&!browser.opera?バージョン:0; browser.isIE=!!browser.msie;browser.isIE8OrLower=!!(browser.msie&&parseInt(browser.msie,10)<=8); browser.mozilla=/mozilla/.test(userAgent)&&!/(互換性|ウェブキット|msie)/. テスト (userAgent)?バージョン: 0; browser.isMozilla=!!browser.mozilla;browser.webkit=/webkit/.test(userAgent)?webkitVersion:0; browser.isWebkit=!!browser.webkit;browser.chrome=/chrome/.test(userAgent)?version:0; browser.isChrome=!!browser.chrome;browser.mobileSafari=/apple.*mobile/.test(userAgent)&&browser.iOS?webkitVersion:0; browser.isMobileSafari=!!browser.mobileSafari;browser.iPadSafari=browser.iPad&&browser.isMobileSafari?webkitVersion:0; browser.isiPadSafari=!!browser.iPadSafari;browser.iPhoneSafari=browser.iPhone&&browser.isMobileSafari?webkitVersion:0; browser.isiPhoneSafari=!!browser.iphoneSafari;browser.iPodSafari=browser.iPod&&browser.isMobileSafari?webkitVersion:0; browser.isiPodSafari=!!browser.iPodSafari;browser.isiOSHomeScreen=browser.isMobileSafari&&!/apple.*mobile.*safari/. テスト (ユーザーエージェント); browser.safari=browser.webkit&&!browser.chrome&&!browser.iOS&&!browser.android?webkitVersion:0; browser.isSafari=!!browser.safari;browser.language=language.split("-",1)[0];browser.current=browser.msie?"msie":browser.mozilla?"mozilla":browser. chrome?"chrome":browser.safari?"safari":browser.opera?"opera":browser.mobileSafari?"mobile-safari":browser.android?"android":"unknown"; ブラウザーを返す};SC.browser=SC._detectBrowser();if(SC_benchmarkPreloadEvents の種類!=="未定義"){SC.benchmarkPreloadEvents=SC_benchmarkPreloadEvents; SC_benchmarkPreloadEvents=undefined}else{SC.benchmarkPreloadEvents={headStart:new Date().getTime()}}SC.setupBodyClassNames=function(){var el=document.body;if(! el){return}var browser,platform,shadows,borderRad,classNames,style; browser=SC.browser.current;platform=SC.browser.windows?"windows":SC.browser.mac?"mac":"他のプラットフォーム"; style=document.documentElement.style;shadows=(style.MozBoxShadow!==未定義)||(style.webkitBoxShadow!==未定義)||(style.oBoxShadow!==未定義)||(style.boxShadow!==未定義); borderRad=(style.MozBorderRadius!==未定義)||(style.webkitBorderRadius!==未定義)||(style.oBorderRadius!==未定義)||(style.borderRadius!==未定義); classNames=el.className?el.className.split(" "):[];if(shadows){classNames.push("box-shadow") }if(borderRad){classNames.push("border-rad") }classNames.push(ブラウザ);if(browser==="chrome"){classNames.push("サファリ")}classNames.push(プラットフォーム); "/applications/documents/sproutcore/ace/en-us/1FCS22.32292/stylesheet-no-repeat@2x.png","/applications/documents/sproutcore/ace/en-us/1FCS22.32292/stylesheet-repeat -x@2x.png","/applications/documents/sproutcore/ace/en-us/1FCS22.32292/stylesheet-repeat-y@2x.png","/applications/documents/download/en-us/1FCS22 .32292/stylesheet-no-repeat@2x.png","/applications/documents/download/en-us/1FCS22.32292/stylesheet-repeat-x@2x.png"] }else{styles=["/applications /documents/download/en-us/1FCS22.32292/stylesheet-packed.css"]; SC.APP_IMAGE_ASSETS=["/applications/documents/sproutcore/desktop/en-us/1FCS22.32292/stylesheet-no-repeat.png","/applications/documents/coreweb/views/en-us/1FCS22.32292/ stylesheet-no-repeat.png","/applications/documents/sproutcore/ace/en-us/1FCS22.

4

3 に答える 3

2

2012 年 7 月現在、次のように動作するようです。しかし、Apple がこれらを生成するためのスキームを変更しないという保証はありません。また、Apple がこれをプライベート API と見なしてアプリを拒否する可能性があります。したがって、自己責任で使用してください

URL には 2 つの重要なパラメータがpありtます。1 つ目はサーバーを識別しているように見えますが、2 つ目は実際のファイルを識別しています。直接ダウンロード リンクは、これらの値を次の URL に差し込むことで作成されます。

https://p[p]-ubiquityws.icloud.com/ws/file/[t]

あなたの例を見る:

https://www.icloud.com/documents/dl/?p=3&t=BAKsXkcDP-p8sdTS8NgBLWRQxE281oe4hogA

pです3、そしてtですBAKsXkcDP-p8sdTS8NgBLWRQxE281oe4hogA。したがって、直接ダウンロードリンクは

https://p3-ubiquityws.icloud.com/ws/file/BAKsXkcDP-p8sdTS8NgBLWRQxE281oe4hogA

p私が iCloud へのリンクを公開したときはいつも01、そのため、値をゼロで埋める必要がある可能性があります。その場合、URL は次のようになります。

https://p03-ubiquityws.icloud.com/ws/file/BAKsXkcDP-p8sdTS8NgBLWRQxE281oe4hogA

それが必要かどうかを知ることは素晴らしいことです。

于 2012-07-27T07:23:07.570 に答える
2

iCloud Drive / iOS8 ではリンクが異なりますが、ファイルへの直接リンクを取得できます。

元のリンク:

https://www.icloud.com/attachment?u=https%3A%2F%2Fms-eu-ams-103-prod.digitalhub.com%2FB%2FATmkKK8ju8SRwQqDoEFKJzbRsxiuAXQ3PBcJBXw1Qot9jz68TkqjiiNu%2F%24%7Bf%7D%3Fo%3DAtenENR8OcvlNq6JMa331mr-8gCreXxwcfgQ26B5gFKo%26v%3D1%26x%3D3%26a%3DBclucinSeKmFAy2GJg%26e%3D1413787013%26k%3D%24%7Buk%7D%26r%3D567CC38A-FD1B-4DE6-B11B-4166A5669E1B-1%26z%3Dhttps%253A%252F%252Fp03-content.icloud.com%253A443%26s%3DlO5SolOouS9qhYz1oIxKDoGtMpo%26hs%3DovfPXj3b9XXz9lWKChBmyNq_cug&amp;uk=OXDCcLTETbvUcOKdJ-vTdQ&amp;f=Testdatei.vrphoto&amp;sz=1212622

読みやすくするためにデコードされた URL:

https://www.icloud.com/attachment?u=https://ms-eu-ams-103-prod.digitalhub.com/B/ATmkKK8ju8SRwQqDoEFKJzbRsxiuAXQ3PBcJBXw1Qot9jz68TkqjiiNu/${f}?o=AtenENR8OcvlNq6JMa331mr-8gCreXxwcfgQ26B5gFKo&v=1&x=3&a=BclucinSeKmFAy2GJg&e=1413787013&k=${uk}&r=567CC38A-FD1B-4DE6-B11B-4166A5669E1B-1&z=https%3A%2F%2Fp03-content.icloud.com%3A443&s=lO5SolOouS9qhYz1oIxKDoGtMpo&hs=ovfPXj3b9XXz9lWKChBmyNq_cug&amp;uk=OXDCcLTETbvUcOKdJ-vTdQ&amp;f=Testdatei.vrphoto&amp;sz=1212622
  • 「?u=」と「&uk=」の間のテキストを NSMutableString として保存します
  • 'uk=' と 'f=' の後の情報を NSStrings として保存します。
  • 最初の文字列で、テキスト '${f}' を 'f=' 文字列に置き換え、テキスト '${uk}' を 'uk=' 文字列に置き換えます。
  • 何らかの理由でファイル サイズが必要な場合は、「sz=」の後の数字ですが、これは最終的なリンクには必要ありません。

出来上がり、ファイルへの直接リンクは次のとおりです。

https://ms-eu-ams-103-prod.digitalhub.com/B/ATmkKK8ju8SRwQqDoEFKJzbRsxiuAXQ3PBcJBXw1Qot9jz68TkqjiiNu/Testdatei.vrphoto?o=AtenENR8OcvlNq6JMa331mr-8gCreXxwcfgQ26B5gFKo&v=1&x=3&a=BclucinSeKmFAy2GJg&e=1413787013&k=OXDCcLTETbvUcOKdJ-vTdQ&r=567CC38A-FD1B-4DE6-B11B-4166A5669E1B-1&z=https%3A%2F%2Fp03-content.icloud.com%3A443&s=lO5SolOouS9qhYz1oIxKDoGtMpo&hs=ovfPXj3b9XXz9lWKChBmyNq_cug
于 2014-10-11T16:13:52.790 に答える
1

そこで参照されているファイルによって面倒な作業が行われているようです。

https://www.icloud.com/applications/documents/download/en-us/1FCS22.32292/javascript-packed.js

そこからファイル名などを探し始めます。

于 2011-10-16T22:32:30.753 に答える