2012-05-20 56 views
0

嗨我是flickrj庫的新手。儘管有基礎的Java知識。
我正在處理的項目需要我對flickr進行身份驗證,然後將帶有地理標籤的圖像下載到本地硬盤上的文件夾中。該程序將是桌面應用程序。
我正在接近該計劃,分爲3個步驟。



1.要完成的身份驗證(我已成功)
2.嘗試下載用戶進行身份驗證時的所有照片。
3.試着改變一下代碼,以便它只下載地理標籤圖像。
java flickr和flickrj下載用戶圖片

我的問題是在第2步。我不能下載登錄的用戶圖像,更不用說帶有地理標記的用戶圖像。 我正在嘗試Daniel Cukier提供的驗證碼here
但是我遇到了問題。 我的netbeans僅僅在.getOriginalAsStream()部分的第77行刪除,錯誤爲「java.lang.RuntimeException:Uncompilable source code - Erroneous sym type:java.io.ByteArrayOutputStream.write」
從我的理解netbeans醒目意味着折舊,但不應該仍然有效?什麼把這個問題全部解決了?

我已經試過研究,基本上我不得不承認,它超出了我的能力來解決問題。如果任何人有任何想法我做錯了,我會很感激。
Ps:我不希望被勺子餵養,但請回答我白癡友好的方式,因爲我還是一名學生,我的Java不是最偉大的。

這段代碼是我到目前爲止所做的。

import com.aetrion.flickr.*; 
import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.net.URL; 
import java.util.Properties; 

import javax.xml.parsers.ParserConfigurationException; 

import org.xml.sax.SAXException; 

import com.aetrion.flickr.auth.Auth; 
import com.aetrion.flickr.auth.AuthInterface; 
import com.aetrion.flickr.auth.Permission; 
import com.aetrion.flickr.photos.Photo; 
import com.aetrion.flickr.photos.PhotoList; 
import com.aetrion.flickr.photos.PhotosInterface; 
import com.aetrion.flickr.util.IOUtilities; 
import java.io.*; 
import java.util.Iterator; 
import org.apache.commons.io.FileUtils; 


public class authenticate { 
Flickr f; 
RequestContext requestContext; 
String frob = ""; 
String token = ""; 
Properties properties = null; 

public authenticate() throws ParserConfigurationException, IOException, SAXException { 
    InputStream in = null; 
    try { 
     in = getClass().getResourceAsStream("/setup.properties"); 
     properties = new Properties(); 

     properties.load(in); 
    } finally { 
     IOUtilities.close(in); 
    } 
    f = new Flickr(
     properties.getProperty("apiKey"), 
     properties.getProperty("secret"), 
     new REST() 
    ); 
    Flickr.debugStream = false; 
    requestContext = RequestContext.getRequestContext(); 
    AuthInterface authInterface = f.getAuthInterface(); 
    try { 
     frob = authInterface.getFrob(); 
    } catch (FlickrException e) { 
     e.printStackTrace(); 
    } 
    System.out.println("frob: " + frob); 
    URL url = authInterface.buildAuthenticationUrl(Permission.DELETE, frob); 
    System.out.println("Press return after you granted access at this URL:"); 
    System.out.println(url.toExternalForm()); 
    BufferedReader infile = 
     new BufferedReader (new InputStreamReader (System.in)); 
    String line = infile.readLine(); 
    try { 
     Auth auth = authInterface.getToken(frob); 
     System.out.println("Authentication success"); 
     // This token can be used until the user revokes it. 
     System.out.println("Token: " + auth.getToken()); 
     System.out.println("nsid: " + auth.getUser().getId()); 
     System.out.println("Realname: " + auth.getUser().getRealName()); 
     System.out.println("Username: " + auth.getUser().getUsername()); 
     System.out.println("Permission: " + auth.getPermission().getType()); 

     PhotoList list = f.getPhotosetsInterface().getPhotos("72157629794698308", 100, 1); 
     for (Iterator iterator = list.iterator(); iterator.hasNext();) { 
     Photo photo = (Photo) iterator.next(); 
     File file = new File("/tmp/" + photo.getId() + ".jpg"); 
     ByteArrayOutputStream b = new ByteArrayOutputStream(); 
     b.write(photo.getOriginalAsStream()); 
     FileUtils.writeByteArrayToFile(file, b.toByteArray()); 
} 






    } catch (FlickrException e) { 
     System.out.println("Authentication failed"); 
     e.printStackTrace(); 
    } 
} 




public static void main(String[] args) { 
    try { 
     authenticate t = new authenticate(); 
    } catch(Exception e) { 
     e.printStackTrace(); 
    } 
    System.exit(0); 
} 

}

+0

請查看:http:// stackoverflow。com/questions/2333285/java-lang-runtimeexception-uncompilable-source-code-what-c​​an-cause-this – nullpotent

+0

我試過了所給的建議。它似乎沒有工作。我認爲這是代碼而不是IDE的問題。但感謝您的答案。 – user1406252

+0

我已經回答了一個非常類似的問題,關於如何在這裏成功地設置一個經過身份驗證的flickrj api實例,我希望這有助於:http://stackoverflow.com/questions/3289552/how-to-access-private-photos-through- flickrj-API/15643638#15643638 –

回答

0

你是在你三振那getOriginalAsStream()已被棄用的解釋是正確的。看起來您可能希望重新使用代碼來使用PhotosInterface.getImageAsStream(),將原始大小作爲參數之一傳遞。

要調整NetBeans針對不推薦方法的行爲,可以按照@AljoshaBre和this one推薦的鏈接進行操作。

0

如果您想要從Flickr下載所有照片,如果您有一臺Mac電腦,則可以這樣做。
在Apple Store上下載Aperture程序並進行安裝。
安裝後,打開光圈。
繼續偏好。
點擊「帳戶」標籤。
點擊左下方的加號(+)添加照片服務。
添加閃爍選項。
按照登錄和授權說明進行操作。
完成!你所有的照片將在你的光圈庫同步〜/ images/

我希望我已經幫助。