自Google推出即时搜索功能以来,它已成为Web设计中的流行趋势。 在线上有一些有趣的示例,例如Michael Hart的Google图片应用 。 这些技术非常简单,即使是具有jQuery经验的Web开发人员也可以选择编程API和JSON数据。

对于本教程,我想解释一下我们如何构建类似的即时搜索Web应用程序 。 与其从Google提取图片,我们还可以使用在短短几年中发展Swift的Instagram 。

这个社交网络最初是作为iOS的移动应用程序。 用户可以拍照并与朋友分享,发表评论并上传到Flickr等第三方网络。 该团队最近被Facebook收购,并为Android Market发布了一个全新的应用程序。 他们的用户基础已经极大地增长,现在开发人员可以像instasearch演示一样构建出色的微型应用程序。

  • 观看演示
  • 下载源

获取API凭证

在创建任何项目文件之前,我们应该首先研究Instagram API系统背后的想法。 您将需要一个帐户来访问开发人员门户 ,该门户为初学者提供了有用的说明。 我们查询Instagram数据库所需要做的只是一个“客户端ID”。

在顶部工具栏中,单击“ 管理客户端”链接,然后单击绿色按钮“注册新客户端”。 您需要为应用程序提供名称,简短描述和网站URL。 在这种情况下,URL和重定向URI可以是相同的值,这仅是因为我们不需要验证任何用户。 只需填写所有值并生成新的应用程序详细信息即可。

您会看到一长串名为CLIENT ID的字符。 稍后在构建后端脚本时,我们将需要此密钥,因此我们将回到本节。 现在,我们可以开始构建jQuery即时搜索应用程序。

默认网页内容

对于我们正在使用的功能,实际HTML非常薄。 由于大多数图像数据是动态附加的,因此我们在页面内只需要几个较小的元素。 可以在index.html文件中找到此代码。

<!doctype html>
<html lang="en">
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><title>Instagram Photo Instant Search App with jQuery</title><meta name="author" content="Jake Rocheleau"><link rel="stylesheet" type="text/css" href="style.css"><script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script><script type="text/javascript" src="ajax.js"></script>
</head><body><div id="w"><section id="sform"><small>Note: No spaces or punctuation allowed. Searches are limited to one(1) keyword.</small><input type="text" id="s" name="s" class="sfield" placeholder="Enter a search tag..." autocomplete="off"></section><section id="photos"></section></div>
</body>
</html>

我正在使用最新的jQuery 1.7.2库以及两个外部.css和.js资源。 输入搜索字段没有外部表单包装器,因为我们不想提交表单并导致页面重新加载。 我在搜索字段中禁用了一些按键操作,以便在用户键入时有更多有限的限制。

我们将在中间部分ID #photos中填充所有照片数据。 它使我们的基本HTML保持整洁且易于阅读。 所有其他内部HTML元素将通过jQuery添加,并且在每次新搜索之前也将被删除。

从API中提取

我想首先创建动态PHP脚本,然后再使用jQuery。 我的新文件名为instasearch.php ,它将包含API中所有重要的后端挂钩。

<?php
header('Content-type: application/json');$client = "YOURCLIENTIDHERE";
$query = $_POST['q'];
$api = "https://api.instagram.com/v1/tags/".$query."/media/recent?client_id=".$client;function get_curl($url) {if(function_exists('curl_init')) {$ch = curl_init();curl_setopt($ch, CURLOPT_URL,$url);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch, CURLOPT_HEADER, 0);curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); $output = curl_exec($ch);echo curl_error($ch);curl_close($ch);return $output;} else{return file_get_contents($url);}
}

第一行表示返回数据的格式为JSON,而不是纯文本或HTML。 这是JavaScript函数正确读取数据所必需的。 之后,我进行了一些变量设置,其中包含应用程序客户端ID,用户搜索值和最终的API URL。 确保更新$client字符串值以匹配您自己的应用程序。

要访问此URL数据,我们需要解析文件内容或使用cURL函数 。 定制函数get_curl()只是一小段代码,可以检查当前PHP配置。

如果您尚未激活cURL,这将尝试激活功能并通过其自己的函数库提取数据。 否则,我们可以简单地使用file_get_contents() ,它虽然速度较慢,但​​仍然可以正常工作。 然后,我们实际上可以将这些数据拉入一个变量,如下所示:

$response = get_curl($api);

组织和返回数据

我们可以从Instagram返回此原始JSON响应,并加载所有信息。 但是有太多额外的数据,遍历所有内容非常烦人。 我更喜欢组织Ajax响应并确切地提取我们需要哪些数据。

首先,我们可以为所有图像设置一个空白数组。 然后在foreach()循环中,我们将一个接一个地提取JSON数据对象。 我们只需要三个(3)特定值,分别是$ src (全尺寸图像URL), $ thumb (缩略图图像URL)和$ url (唯一照片永久链接)。

$images = array();
if($response){foreach(json_decode($response)->data as $item){        $src = $item->images->standard_resolution->url;$thumb = $item->images->thumbnail->url;$url = $item->link;$images[] = array("src" => htmlspecialchars($src),"thumb" => htmlspecialchars($thumb),"url" => htmlspecialchars($url));}
}

那些不熟悉PHP循环的人可能会在此过程中迷路。 如果您不了解语法,请不要过多地关注这些代码段。 我们的图像阵列将包含从最新发布日期提取的最多16-20张独特的照片条目。 然后,我们可以将所有这些代码作为jQuery Ajax响应输出到页面上。

print_r(str_replace('\\/', '/', json_encode($images)));
die();

但是,既然我们已经了解了幕后情况,就可以跳入前端脚本了。 我创建了一个文件ajax.js ,其中包含绑定到搜索字段的几个事件处理程序。 如果您到现在仍在跟进,那么请激动一下,我们已经接近完成!

jQuery关键事件

第一次打开文档ready()事件时,我要设置几个变量。 前两个充当搜索字段和照片容器的直接目标选择器。 我还使用JavaScript计时器暂停搜索查询,直到用户完成输入后900毫秒。

$(document).ready(function(){var sfield = $("#s");var container = $("#photos");var timer;

我们仅使用两个主要功能块。 当专注于搜索字段时,主处理程序由.keydown()事件触发。 我们首先检查键码是否与我们的任何禁止键匹配,如果匹配,则否定键事件。 否则,请清除默认计时器并等待900ms,然后再调用instaSearch()

/** * keycode glossary * 32 = SPACE* 188 = COMMA* 189 = DASH* 190 = PERIOD* 191 = BACKSLASH* 13 = ENTER* 219 = LEFT BRACKET* 220 = FORWARD SLASH* 221 = RIGHT BRACKET*/
$(sfield).keydown(function(e){if(e.keyCode == '32' || e.keyCode == '188' || e.keyCode == '189' || e.keyCode == '13' || e.keyCode == '190' || e.keyCode == '219' || e.keyCode == '221' || e.keyCode == '191' || e.keyCode == '220') {e.preventDefault();} else {clearTimeout(timer);timer = setTimeout(function() {instaSearch();}, 900);   }
});

每次更新值时,它将自动获取新的搜索结果。 我们可能还阻止了许多其他关键代码来触发Ajax函数-但在本教程中无法列出。

Ajax instaSearch()函数

在我的新自定义函数中,我们首先在搜索字段中添加一个“正在加载”类。 此类将更新相机图标以获取新的加载gif图像。 我们还希望清空照片部分中剩余的所有可能数据。 查询变量是从搜索字段中输入的当前值动态提取的。

function instaSearch() {$(sfield).addClass("loading");$(container).empty();var q = $(sfield).val();$.ajax({type: 'POST',url: 'instasearch.php',data: "q="+q,success: function(data){$(sfield).removeClass("loading");$.each(data, function(i, item) {var ncode = '<div class="p"><a target="_blank" href="'+data[i].src+'" class="fullsize" target="_blank"><img src="img/full-image.png" alt="fullsize"></a> <a target="_blank" href="'+data[i].url+'" target="_blank"><img src="'+data[i].thumb+'"></a></div>';$(container).append(ncode);});},error: function(xhr, type, exception) { $(sfield).removeClass("loading");$(container).html("Error: " + type); }});
}

如果您熟悉.ajax()函数,那么所有这些参数都应该看起来很熟悉。 我将用户搜索参数“ q”作为POST数据传递。 成功或失败后,我们将删除“正在加载”类,并将所有响应附加回#photos包装器。

在成功函数中,我们遍历最终的JSON响应以提取单个div元素。 我们可以使用$ .each()函数并以响应数据数组为目标来完成此循环。 否则,失败方法将直接从Instagram API输出任何响应错误消息。 这就是所有的一切!

  • 观看演示
  • 下载源

最后的想法

Instagram团队在扩展如此庞大的应用程序方面做得非常出色。 该API有时可能很慢,但是响应数据始终采用正确的格式并且非常易于使用。 我希望本教程可以证明在第三方应用程序上有很多功能。

不幸的是,当前的Instagram搜索查询一次不允许超过1个标签。 这仅限于我们的演示,但它肯定不会消除其任何魅力。 您应该查看上面的实时示例并下载我的源代码副本以进行试用。 另外,请在下面的帖子讨论区中告诉我们您的想法。

翻译自: https://www.hongkiat.com/blog/instagram-photo-search/

instagram搜索_如何使用jQuery和PHP构建自己的Instagram搜索引擎相关推荐

  1. delphi 找到某个按钮的句柄_想要又快有准的找到Instagram网红,不妨试试这些方法...

    随着网络的发展,网红成了时下非常流行的词汇,网红的存在,给我们的生活带来了更为丰富个性的色彩,而网红营销更是将网红与经济相结合,成了一种新型的营销方式. 国内有"口红一哥"李佳琦, ...

  2. instagram架构_如何创建像Instagram这样的照片共享应用程序:基本知识。

    instagram架构 by Dmytro Brovkin 由Dmytro Brovkin 如何创建像Instagram这样的照片共享应用程序:基本知识. (How to create a photo ...

  3. instagram架构_提升Instagram销量的8条秘诀

    instagram架构 When Facebook bought Instagram in 2012, it sent a clear signal that this was a platform ...

  4. 网盘搜索_就用网盘传奇-最有效的百度网盘搜索引擎

    网盘搜索_就用网盘传奇-最有效的百度网盘搜索引擎 https://jidanso.com/

  5. instagram 标签_使Instagram更适合您的11条提示

    instagram 标签 Instagram is an interesting social network, with a different set of rules and requireme ...

  6. instagram软件_我在facebook instagram担任软件工程师的4年中的4个教训

    instagram软件 语境 (Context) I joined Facebook as a software engineer (9/6/2016) and today is my four ye ...

  7. 正在搜索需要的文件一直在搜索_正在被蚕食的百度搜索

    28.03.2019 本文字数:3118,阅读时长大约6分钟 导读:百度搜索在国内一家独大的格局虽暂时无人撼动,但愈发饱和的流量市场背后,搜索业务正呈现出多元化与差异化发展的趋势. 作者 | 第一财经 ...

  8. 开源搜索引擎 种子搜索_使用开源搜索引擎自定义您的互联网

    开源搜索引擎 种子搜索 很久以前,互联网很小,只有几个人可以将它们编入索引,这些人收集了所有网站的名称和位置,并按页面或印刷书籍中的主题列出了它们. 随着万维网网络的发展,"网络响动&quo ...

  9. instagram akp_您现在可以将音乐添加到您的Instagram故事中

    instagram akp Music makes everything better, and as of today Instagram users from eight countries ca ...

最新文章

  1. 【SpringBoot专题】监控健康状况
  2. VC由进程ID获取窗口句柄的各种方
  3. jquery 插件和后台模板搜集
  4. 浅谈Vue内置component组件的应用场景
  5. 如何使用redis来实现常见的游戏排行榜
  6. 关于GPS 车辆定位导航中的投影变换
  7. android微信打不开怎么办,微信打不开怎么回事
  8. Python安装GDAL库的问题
  9. 后盾网php多少钱_亿多星全脑开发招代理多少钱@山东聊城网
  10. node中的数据持久化
  11. rem在响应式布局中的应用
  12. 字模提取软件怎么放大_图片无损放大软件 Topaz Gigapixel AI
  13. 史上最全的android学习资料
  14. PMP考试有哪些技巧?
  15. cad立面索引符号 规范_园林景观设计规范,你不可或缺的真干货
  16. 「干货」那些必知的物联网行业术语
  17. 智能客服搭建(5) - FreeSWITCH + mod_unimrcp + ESL 开发对接
  18. 微信 android应用签名生成工具,GitHub - feinoah/WeChatSignature: 改进版本的微信应用签名生成工具,再也不用输入包名了!...
  19. 第二次作业-时事点评
  20. 学习ZYNQ问题记录

热门文章

  1. 计算机有哪些神奇功能,鲜为人知的神奇功能!Win10秘技大放送
  2. html游戏导出存档,Savedatafiler使用教程 Savedatafiler导出cia存档
  3. 小程序 绑定监听函数addEvent和通知函数callEvent
  4. Polkadot学习概念总结
  5. 计算机论文摘要200字模板,论文的摘要范文(论文摘要是摘抄还是自己写)
  6. 防止糖尿病的天然胰岛素——普洱熟茶
  7. 关于 SCI、SSCI、CSSCI 北大核心,南大核心 等期刊介绍
  8. java获取上月、下月日期
  9. 何为鸿蒙?和安卓的区别到底是什么?别再扯套壳了
  10. 数美科技斩获36氪“WISE 2020数据智能最佳解决方案”