<div>유투브 관련 안드로이드 어플 만드는 중입니다.</div> <div><br></div><a target="_blank" href="https://developers.google.com/youtube/v3/guides/using_resumable_upload_protocol">https://developers.google.com/youtube/v3/guides/using_resumable_upload_protocol</a> <div>이 사이트 참고해서 업로드 기능을 넣는 중입니당.</div> <div>(업로드 기능이 꼭 필요하다기 보단....걍 공부하는 셈 치고 넣는 중입니당)</div> <div><br></div> <div>업로드할 동영상의 메타데이터를 POST 요청으로 보내려고 하는데요</div> <div><br></div> <div> <div style="text-align:left;"><img src="http://thimg.todayhumor.co.kr/upfile/201410/1412393152kGpNYA4Khu4qcjPaVMmCCb3.png" width="800" height="472" alt="제목 없음.png" class="chimg_photo" style="border:none;"></div>요렇게 생겨먹은 POST 를 보내야 해요.</div> <div>그래서 만든 메소드가....</div> <div>(아, private static final String INITIAL_UPLOAD_URL = "<a target="_blank" href="https://www.googleapis.com/upload/youtube/v3/videos">https://www.googleapis.com/upload/youtube/v3/videos</a>"; 라고 클래스 맨 위에 정했어욤);</div> <div><pre style="line-height:normal;"><span style="color:#0000FF;">private</span> String uploadMetaData(String filePath, <span style="color:#0000FF;">boolean</span> retry) <span style="color:#0000FF;">throws</span> IOException { String title = getTitleText(); String description = getDescriptionText(); String category = DEFAULT_VIDEO_CATEGORY; String tags = DEFAULT_VIDEO_TAGS; <span style="color:#0000FF;">if</span> (getTagsText() != <span style="color:#0000FF;">null</span> && getTagsText().trim().length() != <span style="color:#800000;">0</span>) { tags = getTagsText(); } String urlData = <span style="color:#800000;">"uploadType=resumable&part=snippet,status,contentDetails"</span>; String uploadUrl = INITIAL_UPLOAD_URL + <span style="color:#800000;">"?"</span> + urlData; URL url = <span style="color:#0000FF;">new</span> URL(uploadUrl); HttpURLConnection urlConnection = (HttpURLConnection)url.openConnection(); urlConnection.setRequestMethod(<span style="color:#800000;">"POST"</span>); urlConnection.setRequestProperty(<span style="color:#800000;">"Host"</span>, <span style="color:#800000;">"www.googleapis.com"</span>); urlConnection.setRequestProperty(<span style="color:#800000;">"Authorization"</span>, String.format(<span style="color:#800000;">"Bearer %s"</span>, accessToken)); urlConnection.setRequestProperty(<span style="color:#800000;">"Content-Type"</span>, <span style="color:#800000;">"application/json; charset=UTF-8"</span>); urlConnection.setRequestProperty(<span style="color:#800000;">"X-Upload-Content-Type"</span>, <span style="color:#800000;">"video/*"</span>); <span style="color:#008000;">// urlConnection.setRequestProperty("Content-Length", );</span> <span style="color:#008000;">// urlConnection.setRequestProperty("X-Upload-Content-Length", );</span> urlConnection.setDoOutput(<span style="color:#800000;">true</span>); String postDataForm = <span style="color:#800000;">"{\n\"snippet\": {\n\"title\": \"%s\",\n\"description\": \"%s\",\n\"tags\": "</span> + <span style="color:#800000;">"[\"cool\", \"video\", \"more keywords\"],\n\"categoryId\": 22\n},\n\"status\": "</span> + <span style="color:#800000;">"{\n\"privacyStatus\": \"public\",\n\"embeddable\": True,\n\"license\": \"youtube\"\n}\n}"</span>; String postData = String.format(postDataForm, title, description, tags); DataOutputStream dos = <span style="color:#0000FF;">new</span> DataOutputStream(urlConnection.getOutputStream()); dos.writeBytes(postData); dos.flush(); dos.close(); <span style="color:#0000FF;">int</span> responseCode = urlConnection.getResponseCode(); <span style="color:#0000FF;">if</span> (responseCode < <span style="color:#800000;">200</span> || responseCode >= <span style="color:#800000;">300</span>) { <span style="color:#008000;">// The response code is 40X</span> <span style="color:#0000FF;">if</span> ((responseCode + <span style="color:#800000;">""</span>).startsWith(<span style="color:#800000;">"4"</span>) && retry) { Log.d(LOG_TAG, <span style="color:#800000;">"retrying to fetch auth token for "</span> + name); <span style="color:#008000;">// this.clientLoginToken = authorizer.getFreshAuthToken(youTubeName, clientLoginToken);</span> <span style="color:#008000;">// Try again with fresh token</span> <span style="color:#0000FF;">return</span> uploadMetaData(filePath, <span style="color:#800000;">false</span>); } <span style="color:#0000FF;">else</span> { <span style="color:#0000FF;">throw</span> <span style="color:#0000FF;">new</span> IOException(String.format(<span style="color:#800000;">"response code='%s' (code %d)"</span> + <span style="color:#800000;">" for %s"</span>, urlConnection.getResponseMessage(), responseCode, urlConnection.getURL())); } } Log.d(<span style="color:#800000;">"크르릉"</span>, <span style="color:#800000;">"urlConnection.getHeaderField "</span> + urlConnection.getHeaderField(<span style="color:#800000;">"Location"</span>)); <span style="color:#0000FF;">return</span> urlConnection.getHeaderField(<span style="color:#800000;">"Location"</span>); }</pre><pre style="line-height:normal;"><br></pre><pre style="line-height:normal;">인데요....</pre><pre style="line-height:normal;"><br></pre><pre style="line-height:normal;"></pre><pre>String postDataForm = <span style="color:#800000;">"{\n\"snippet\": {\n\"title\": \"%s\",\n\"description\": \"%s\",\n\"tags\": "</span> + <span style="color:#800000;">"[\"cool\", \"video\", \"more keywords\"],\n\"categoryId\": 22\n},\n\"status\": "</span> + <span style="color:#800000;">"{\n\"privacyStatus\": \"public\",\n\"embeddable\": True,\n\"license\": \"youtube\"\n}\n}"</span>; String postData = String.format(postDataForm, title, description, tags); DataOutputStream dos = <span style="color:#0000FF;">new</span> DataOutputStream(urlConnection.getOutputStream()); dos.writeBytes(postData); dos.flush(); dos.close();</pre><pre>이 부분이 없으면 일단 업로드는 되요. 다만 title, description, tags 이런 정보가 업로드 되지 않고 동영상만 업로드 되네요...</pre><pre>(동영상 업로드는 위의 메소드에서 받은 리턴값을 이용해서 다른 메소드에서 처리합니당)</pre><pre><br></pre><pre>암만 생각해봐도 postDataForm 부분이 잘못된 거 같은데요..... 어케 해야 하는걸까요 ㅜㅜ</pre><pre>어제 저녁부터 새벽까지 저거 하나땜에 고생이네요.... 요리 바꾸고 조리 바꾸고 해봤는데 계속 실패 ㅜㅜ</pre><pre>도움이 필요합니다~</pre></div>
<a href="http://blog.naver.com/finalboogi">글냥이의 4공간</a>
댓글 분란 또는 분쟁 때문에 전체 댓글이 블라인드 처리되었습니다.