Skype用户的在线状态是否仍然可以获取?

14
如标题所述,经过 Skype API 服务的(大)变化后,是否仍然有可能检查 Skype 用户的状态(在线、离线、忙碌等)?开发者部分现在似乎非常有限:http://developer.skype.com/
3个回答

9

更新于2014年12月19日:

需要注意的是:仅当用户已启用“我的网络状态”或“Mein Status darf im Netz veröffentlicht werden”(德语)时,才能检查Skype状态。 否则状态始终为“离线”。


6

5

是的,有。

有一些URL可以用来检测在线状态。

这会给出一个带有状态名称的文本(例如离开或在线)

http://mystatus.skype.com/SKYPENAME.txt

这会给您一个数字化的Skype状态码(见下面的列表)。

http://mystatus.skype.com/SKYPENAME.num

这将提供一个包括不同语言的数值状态码和状态文本的xml输出。

http://mystatus.skype.com/SKYPENAME.xml

最后,您将拥有显示不同状态图标图像的网址: 将“smallicon”或“smallclassic”替换为您喜欢的图像。 (可能的值:balloon,bigclassic,smallclassic,smallicon, mediumicon,dropdown-white,dropdown-trans)

http://mystatus.skype.com/smallicon/SKYPENAME http://mystatus.skype.com/smallclassic/SKYPENAME http://mystatus.skype.com/SKYPENAME

在PHP中,最好的方法是使用我的函数:
  /**
   * @version: 1.0 (2014-05-13
   *
   * @param: String $username             Skype Username
   * @param: [String $lang]               Languagecode (possible values 2014-05-13: "en", "fr", "de","ja", "zh-cn", "zh-tw", "pt", "pt-br", "it", "es", "pl" , "pl"
   * @param: [String $img_time]           Typ im Status Image wich you like to show (Possible values: 2014-05-13: balloon, bigclassic, smallclassic, smallicon, mediumicon, dropdown-white, dropdown-trans)
   *
   * @return array                        "num" = Skype Statuscode, "text" = Statustext (Away" ect.), "img_url" url to Statuscode Image
   */
  function getSkypeStatus($username, $lang = "de", $img_type = "mediumicon")
  {
    $url = "http://mystatus.skype.com/".$username.".xml";
    $data = @file_get_contents($url);

    $status = array();
    if($data === false)
    {
      $status = array("num" =>0,
                      "text"=>"http error"
                );
      if(isset($http_response_header)) $status["error_info"] = $http_response_header;
    }
    else
    {
      $pattern = '/xml:lang="NUM">(.*)</';
      preg_match($pattern,$data, $match);

      $status["num"] = $match[1];

      $pattern = '/xml:lang="' . $lang .'">(.*)</';
      preg_match($pattern,$data, $match);

      $status["text"]    = $match[1];
      $status["img_url"] = "http://mystatus.skype.com/".$img_type."/".$username;
    }
    return $status;
  }

使用方法:

$status = getSkypeStatus("YourSkypeName"); // Minimal
$status = getSkypeStatus("YourSkypeName","de");  // with defined language for Statustext
$status = getSkypeStatus("YourSkypeName","de", "mediumicon"); // with specified image 

// to display status Icon:

echo '<img src="'.$status["img_url"].'" alt="'.$status["text"].'" title="'.$status["text"].'">';


// or if you like to do you own code for different status

switch($status["num"])
{
  case 7:
  case 2: echo "You are online"; break;
  default: echo "you are offline or in away state";
}

可能的状态信息(用英语)如下:

  • http错误:获取api数据时发生错误,例如存在互联网问题
  • 连接未知:未选择或无可用数据。脱机:
  • 用户离线 在线:用户在线 离开:
  • 用户离开 不可用:用户不可用 请勿打扰:
  • 用户请勿打扰(DND) 隐身:用户隐身或处于离线状态
  • Skype Me:用户处于Skype Me模式

可能的数字状态码:

  • case 0 = 未知
  • case 1 = 离线
  • case 2 = 在线
  • case 3 = 离开
  • case 4 = 不可用
  • case 5 = 请勿打扰
  • case 6 = 隐身
  • case 7 = Skype Me
我从以下帖子中获取了这些信息: https://stackoverflow.com/a/16320950/2377961 https://dev59.com/vk7Sa4cB1Zd3GeqP216r#6426418

如果我的用户名中有一个点该怎么办? - Darmen Amanbay
1
如果您的名称包含一个点,它也应该起作用。如果不行,请尝试Boann在这里提供的函数:https://dev59.com/WGct5IYBdhLWcg3wcs-G#12093450,它应该用HTML%代码替换所有内容。 - Radon8472
1
http://mystatus.skype.com/smallicon/<skype登录名> 链接不可用:<html><body><b>Http/1.1 服务无法使用</b></body></html> - SanŚ́́́́Ý́́́́Ś́́́́
1
唔...也许微软在收购Skype后又改变了这个API :( - Radon8472
5
这些链接对我来说似乎不再起作用了……我认为是DNS错误。 - ColinMcDermott

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接