如何从浏览器中读取.vcf文件?

时间:2015-09-03 16:01:02

标签: php web-crawler vcf

我正在尝试从IFA Berlin的参展商处检索所有电子邮件地址。 这很容易爬行。

但作为一个棘手的部分,他们只是允许我们下载.vcf文件或发送电子邮件(我猜他们的服务器)。我想找到那个电子邮件地址而不下载那个vcf文件。否则我可以下载它并使用PHP轻松阅读(因为我的抓取工具也是PHP)。

这也是我潜伏多年后的第一个问题!很高兴见到你们。

1 个答案:

答案 0 :(得分:0)

  

如何从浏览器中读取.vcf文件?

此文件始终是文件下载,不会在浏览器中显示。使其工作的一种方法是设置自定义浏览器扩展,临时存储文件并解析微格式并显示信息。

  

PHP抓取方法

那里有vcard解析器:https://github.com/nuovo/vCard-parser 但我认为你可以基于RegExp解决方案:/EMAIL;INTERNET:(.*)/

让我们假装,您的第一次抓取操作会为您提供一份与会者ID列表, 然后你的第二个(vcard)抓取运行可以通过ID获取并提取名称和电子邮件:

<?php

function getVcard($id) {
    return file_get_contents('http://www.virtualmarket.ifa-berlin.de/?Action=attendeeVcard&id=' . $id);
}

function getEmailFromVcard($vcard)
{
    preg_match('/EMAIL;INTERNET:(.*)/', $vcard, $matches);
    if(isset($matches[1])) {
        return $matches[1];
    }
}

function getNameFromVcard($vcard)
{
    preg_match('/N:(.*);;/', $vcard, $matches);
    if(isset($matches[1])) {
        $array = explode(';', $matches[1]);
        $name = trim($array[1]) . ' ' . trim($array[0]);
        return $name;
    }
}

$id = 1775586;

$vcard = getVcard($id);
$email = getEmailFromVcard($vcard);
$name = getNameFromVcard($vcard);

echo $name . ' ' . $email;