[英]java flickr and flickrj download user pictures
嗨,我是flickrj库的新手。
虽然有基础的Java知识。
我正在从事的项目要求我先对flickr进行身份验证,然后将带有地理标签的图像下载到本地硬盘驱动器的文件夹中。 该程序将是桌面应用程序。
我将程序分为3个步骤进行处理。
1.完成正确的身份验证。(我已经成功了)
2.尝试下载用户通过身份验证后拥有的所有照片。
3.尝试稍微修改一下代码,使其仅下载带有地理标签的图像。
我的问题出在步骤2上。我无法下载已登录的用户图像,更不用说带有地理标签的用户图像了。 我想丹尼尔Cukier提供的代码在这里
但是我遇到了问题。 我的netbeans只是从.getOriginalAsStream()部分的第77行开始,出现错误“ java.lang.RuntimeException:无法编译的源代码-错误的符号类型:java.io.ByteArrayOutputStream.write”
根据我的理解,netbeans下线意味着,它已经贬值了,但是它仍然可以正常工作吗? 是什么阻碍了整个问题?
我已经尝试过研究,但基本上我必须承认,这是我无法解决问题的能力。 如果有人对我做错了什么有任何想法,我将非常感激。
附:我不希望被人喂,但请以白痴友好的方式回答我,因为我仍然是学生,而我的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);
}
}
您对不赞成使用getOriginalAsStream()的删除规则的解释是正确的。 看来您可能需要重新编写代码以使用PhotosInterface.getImageAsStream() ,并将ORIGINAL大小作为参数之一传递。
要调整NetBeans的相对于不赞成的方法行为,可以遵循@AljoshaBre以及推荐的链接这一个 。
如果要从Flickr下载所有照片,则如果有Mac计算机,则可以这样做。
在Apple Store上下载并安装Aperture程序。
安装后,打开Aperture。
继续进行偏好设置。
点击“帐户”标签。
单击左下角的加号(+)添加照片服务。
添加闪烁选项。
请遵循登录和授权说明。
做完了! 您所有的照片将在〜/ images /中的光圈库中同步
我希望能有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.