Java 提取facebook页面的链接

Java 提取facebook页面的链接,java,json,facebook-graph-api,Java,Json,Facebook Graph Api,如何提取facebook页面的所有链接。我可以使用jsoup提取它,并将“like”链接作为参数传递,以提取喜欢该特定页面的所有用户信息吗 private static String readAll(Reader rd) throws IOException { StringBuilder sb = new StringBuilder(); int cp; while ((cp = rd.read()) != -1) { sb.append((char) cp); } return sb

如何提取facebook页面的所有链接。我可以使用jsoup提取它,并将“like”链接作为参数传递,以提取喜欢该特定页面的所有用户信息吗

private static String readAll(Reader rd) throws IOException 
{
StringBuilder sb = new StringBuilder();
int cp;
while ((cp = rd.read()) != -1) 
{
  sb.append((char) cp);
}
return sb.toString();
}

 public static JSONObject readurl(String url) throws IOException, JSONException
 {
 InputStream is = new URL(url).openStream();
 try 
 {
  BufferedReader rd = new BufferedReader
(new InputStreamReader(is, Charset.forName("UTF-8")));
  String jsonText = readAll(rd);
  JSONObject json = new JSONObject(jsonText);

  return json;
} 
finally
{
  is.close();
}
}
public static void main(String[] args) throws IOException, 
JSONException,  FacebookException 
{
  try
  {

    System.out.println("\nEnter the search string:");
    @SuppressWarnings("resource")
    Scanner sc=new Scanner(System.in);
    String s=sc.nextLine();
    JSONObject json = readurl("https://graph.facebook.com/"+s);

    System.out.println(json);
}} 
我可以修改此代码并集成此代码吗。下面的代码提取特定页面的所有链接。我试图修改上面的代码,但不起作用

 String url = "http://www.firstpost.com/tag/crime-in-india";
  Document doc = Jsoup.connect(url).get();
  Elements links = doc.getElementsByTag("a");
   System.out.println(links.size());

    for (Element link : links) 
    {
        System.out.println(link.absUrl("href") +trim(link.text(), 35));     
    }
  }

  public static String trim(String s, int width) {
    if (s.length() > width)
        return s.substring(0, width-1) + ".";
    else
        return s;
  }
 }

您可以尝试以下替代方法:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.LinkedHashSet;
import java.util.Set;

import javax.swing.text.MutableAttributeSet;
import javax.swing.text.html.HTML;
import javax.swing.text.html.HTML.Tag;
import javax.swing.text.html.HTMLEditorKit;
import javax.swing.text.html.parser.ParserDelegator;

public class URLExtractor {

    private static class HTMLPaserCallBack extends HTMLEditorKit.ParserCallback {

        private Set<String> urls;

        public HTMLPaserCallBack() {
            urls = new LinkedHashSet<String>();
        }

        public Set<String> getUrls() {
            return urls;
        }

        @Override
        public void handleSimpleTag(Tag t, MutableAttributeSet a, int pos) {
            handleTag(t, a, pos);
        }

        @Override
        public void handleStartTag(Tag t, MutableAttributeSet a, int pos) {
            handleTag(t, a, pos);
        }

        private void handleTag(Tag t, MutableAttributeSet a, int pos) {
            if (t == Tag.A) {
                Object href = a.getAttribute(HTML.Attribute.HREF);
                if (href != null) {
                    String url = href.toString();
                    if (!urls.contains(url)) {
                        urls.add(url);
                    }
                }
            }
        }
    }

    public static void main(String[] args) throws IOException {
        InputStream is = null;
        try {
            String u = "https://www.facebook.com/";
            URL url = new URL(u);
            is = url.openStream(); // throws an IOException
            HTMLPaserCallBack cb = new HTMLPaserCallBack();
            new ParserDelegator().parse(new BufferedReader(new InputStreamReader(is)), cb, true);
            for (String aUrl : cb.getUrls()) {
                System.out.println("Found URL: " + aUrl);
            }
        } catch (MalformedURLException mue) {
            mue.printStackTrace();
        } catch (IOException ioe) {
            ioe.printStackTrace();
        } finally {
            try {
                is.close();
            } catch (IOException ioe) {
                // nothing to see here
            }
        }
    }
}
导入java.io.BufferedReader;
导入java.io.IOException;
导入java.io.InputStream;
导入java.io.InputStreamReader;
导入java.net.MalformedURLException;
导入java.net.URL;
导入java.util.LinkedHashSet;
导入java.util.Set;
导入javax.swing.text.MutableAttributeSet;
导入javax.swing.text.html.html;
导入javax.swing.text.html.html.Tag;
导入javax.swing.text.html.HTMLEditorKit;
导入javax.swing.text.html.parser.ParserDelegator;
公共类提取程序{
私有静态类HTMLPaserCallBack扩展了HTMLEditorKit.ParserCallback{
专用设置URL;
公共HtmlPasserCallback(){
URL=新LinkedHashSet();
}
公共集getURL(){
返回URL;
}
@凌驾
public void handleSimpleTag(标记t、可变属性集a、整数位置){
把手(t、a、pos);
}
@凌驾
公共无效handleStartTag(Tag t,可变属性集a,内部位置){
把手(t、a、pos);
}
私有void handleTag(标签t、可变属性集a、内部位置){
if(t==Tag.A){
Object href=a.getAttribute(HTML.Attribute.href);
如果(href!=null){
字符串url=href.toString();
如果(!url.contains(url)){
添加(url);
}
}
}
}
}
公共静态void main(字符串[]args)引发IOException{
InputStream=null;
试一试{
字符串u=”https://www.facebook.com/";
URL=新URL(u);
is=url.openStream();//引发IOException
HTMLPaserCallBack cb=新的HTMLPaserCallBack();
新的ParserDelegator().parse(新的BufferedReader(新的InputStreamReader(is)),cb,true);
for(字符串aUrl:cb.getUrls()){
System.out.println(“找到的URL:+aUrl”);
}
}捕获(格式不正确){
mue.printStackTrace();
}捕获(ioe异常ioe){
ioe.printStackTrace();
}最后{
试一试{
is.close();
}捕获(ioe异常ioe){
//这里没什么可看的
}
}
}
}

这是一种工作方式,但我不确定您是否可以使用jsoup,我更愿意研究casperjs或phantomjs

import java.io.IOException;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class getFaceBookLinks {

    public static Elements getElementsByTag_then_FilterBySelector (String tag, String httplink, String selector){
        Document doc = null;
        try {
            doc = Jsoup.connect(httplink).get();
        } catch (IOException e) {
            e.printStackTrace();
        }
        Elements links = doc.getElementsByTag(tag);
        return links.select(selector);
    }

    //Test functionality
    public static void main(String[] args){
        // The class name for the like links on facebook is UFILikeLink
        Elements likeLinks = getElementsByTag_then_FilterBySelector("a", "http://www.facebook.com", ".UFILikeLink");        
        System.out.println(likeLinks);

    }

}

向URL添加原始字符串可能会产生无效的URL(例如,考虑空格);你最好在这里使用URI模板(请参阅支持它们的库——是的,自我提升)@fge我会修改它..但是我可以使用JSOUPWEL提取FB页面的所有链接吗,可能是这样,yes@fge我编辑了我的代码..现在请check@fge我完全是个呆子,我想得到一个特定的fb页面的所有喜欢的东西,但我无法得到“喜欢”的链接“我不完全确定这会得到类似于iFrame的链接,尽管它不起作用。有一些错误存在..你能清楚地理解你的建议吗?我给了链接行这样的元素,如elinks=getElementsByTag\u然后\u FilterBySelector(“a”、“”、“.UFILikeLink”);在这种情况下,如果要提取链接,您可能需要更改用户代理以模拟触摸设备(这些网页上没有pc网络浏览器的“a”链接)