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

Php 如何从浏览器读取.vcf文件?,php,web-crawler,vcf-vcard,Php,Web Crawler,Vcf Vcard,我正在尝试从展会的参展商那里检索所有电子邮件地址。 不过这很容易爬 但作为一个棘手的部分,他们只允许我们下载.vcf文件或发送电子邮件(我想是通过他们的服务器)。我想在不下载vcf文件的情况下找到该电子邮件地址。否则,我可以下载它并使用PHP轻松阅读(因为我的爬虫程序也使用PHP) 这也是我在这里潜伏多年后的第一个问题!很高兴认识你们 如何从浏览器中读取.vcf文件 此文件将始终为文件下载,并且从不在浏览器中显示。使其工作的一种方法是设置自定义浏览器扩展名,该扩展名临时存储文件并解析微格式并显示

我正在尝试从展会的参展商那里检索所有电子邮件地址。 不过这很容易爬

但作为一个棘手的部分,他们只允许我们下载.vcf文件或发送电子邮件(我想是通过他们的服务器)。我想在不下载vcf文件的情况下找到该电子邮件地址。否则,我可以下载它并使用PHP轻松阅读(因为我的爬虫程序也使用PHP)

这也是我在这里潜伏多年后的第一个问题!很高兴认识你们

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

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

PHP刮取方法

那里有vcard解析器: 但我认为您可以基于RegExp解决方案:
/EMAIL;互联网:(.*)/

让我们假设,您的第一次抓取运行会给您一个与会者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;

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

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

PHP刮取方法

那里有vcard解析器: 但我认为您可以基于RegExp解决方案:
/EMAIL;互联网:(.*)/

让我们假设,您的第一次抓取运行会给您一个与会者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;

哇,谢谢!是的,这个文件很容易解析,这就是我要做的,非常感谢!如果我有更多的问题,我会把它们贴在这里。多亏了你,几分钟内就完成了!我以前从未使用过regexp,它对我来说总是很复杂。你有关于它的好教程吗?再次感谢正则表达式在一开始可能有点混乱,但是一旦你习惯了一些基本的可重用匹配表达式,有趣的因素就开始了。一个好的交互式教程是。一个很有价值的互动工具是:。你也会得到关于发生了什么的详细解释。示例:-我使用的表达式是
(.*)
-捕获任何内容。最基本的东西,甜心!谢谢,看起来真的很有趣哇谢谢你!是的,这个文件很容易解析,这就是我要做的,非常感谢!如果我有更多的问题,我会把它们贴在这里。多亏了你,几分钟内就完成了!我以前从未使用过regexp,它对我来说总是很复杂。你有关于它的好教程吗?再次感谢正则表达式在一开始可能有点混乱,但是一旦你习惯了一些基本的可重用匹配表达式,有趣的因素就开始了。一个好的交互式教程是。一个很有价值的互动工具是:。你也会得到关于发生了什么的详细解释。示例:-我使用的表达式是
(.*)
-捕获任何内容。最基本的东西,甜心!谢谢,看起来真的很有趣