Neo4j:绘制“我的名字是……我在工作”图

在过去的几天里,我一直在关注DHH兴起的“我的名字是……”的推文。 据我了解,其想法是表明在白板上编写采访谜语/艰巨任务是荒谬的。

其他人引用了该推文并添加了自己的文章,昨天Eduardo Hernacki建议遍历这条推文链似乎是为Neo4j量身定制的。

Michael很快就出现在现场,并创建了一个Cypher查询,该查询调用Twitter API,并根据生成的JSON响应创建Neo4j图形。 唯一棘手的一点是创建“承载者令牌”,但是Jason Kotchoff有一个很有帮助的要点,展示了如何从您的Twitter消费者密钥和消费者秘密中生成一个。

现在我们已经获得了承载令牌,让我们创建一个参数来存储它。 在Neo4j浏览器中键入以下内容:

:param bearer: '<your-bearer-token-goes-here>'

现在,我们准备查询Twitter API。 我们将从搜索API开始,找到包含文本“我的名字”“我在工作”'的所有推文。 这将返回一个包含大量推文的JSON响应。 然后,我们将为它返回的每个推文创建一个节点,为发布该推文的用户创建一个节点,为其引用的推文创建一个节点,以及将它们粘合在一起的关系。

我们将使用APOC库中的apoc.load.jsonParams过程来帮助我们导入数据。 如果要继续学习,可以使用安装了APOC的Neo4j沙箱实例 。 对于本地Neo4j安装,在重新启动Neo4j之前,请抓住APOC jar并将其放入您的plugins文件夹中。

这是完整的查询:

WITH 'https://api.twitter.com/1.1/search/tweets.json?count=100&result_type=recent⟨=en&q=' as url, {bearer} as bearerCALL apoc.load.jsonParams(url + "%22my%20name%22%20is%22%20%22I%20work%22",{Authorization:"Bearer "+bearer},null) yield valueUNWIND value.statuses as status
WITH status, status.user as u, status.entities as e
WHERE status.quoted_status_id is not null// create a node for the original tweet
MERGE (t:Tweet {id:status.id}) 
ON CREATE SET t.text=status.text,t.created_at=status.created_at,t.retweet_count=status.retweet_count, t.favorite_count=status.favorite_count// create a node for the author + a POSTED relationship from the author to the tweet
MERGE (p:User {name:u.screen_name})
MERGE (p)-[:POSTED]->(t)// create a MENTIONED relationship from the tweet to any users mentioned in the tweet
FOREACH (m IN e.user_mentions | MERGE (mu:User {name:m.screen_name}) MERGE (t)-[:MENTIONED]->(mu))// create a node for the quoted tweet and create a QUOTED relationship from the original tweet to the quoted one
MERGE (q:Tweet {id:status.quoted_status_id})
MERGE (t)–[:QUOTED]->(q)// repeat the above steps for the quoted tweet
WITH t as t0, status.quoted_status as status WHERE status is not null
WITH t0, status, status.user as u, status.entities as eMERGE (t:Tweet {id:status.id}) 
ON CREATE SET t.text=status.text,t.created_at=status.created_at,t.retweet_count=status.retweet_count, t.favorite_count=status.favorite_countMERGE (t0)-[:QUOTED]->(t)MERGE (p:User {name:u.screen_name})
MERGE (p)-[:POSTED]->(t)FOREACH (m IN e.user_mentions | MERGE (mu:User {name:m.screen_name}) MERGE (t)-[:MENTIONED]->(mu))MERGE (q:Tweet {id:status.quoted_status_id})
MERGE (t)–[:QUOTED]->(q);

生成的图形如下所示:

MATCH p=()-[r:QUOTED]->() RETURN p LIMIT 25

一个更有趣的查询是找到从DHH到Eduardo的路径,我们可以通过以下查询找到该路径:

match path = (dhh:Tweet {id: 834146806594433025})<-[:QUOTED*]-(eduardo:Tweet{id: 836400531983724545})
UNWIND NODES(path) AS tweet
MATCH (tweet)<-[:POSTED]->(user)
RETURN tweet, user

该查询:

  • 从DHH的推文开始
  • 遍历所有QUOTED关系,直到找到Eduardo的推文
  • 收集所有这些推文,然后找到作者
  • 返回推文和作者

这是输出:

我针对Twitter API进行了其他一些查询,以混合一些我们尚未设置所有属性的节点-您可以在此要点上查看所有查询 。

在接下来的几天里,我还将有一个运行https://10-0-1-157-32898.neo4jsandbox.com/browser/的沙箱。 您可以使用凭据readonly / twitter登录。

如果您有任何疑问/建议,请在评论中告诉我, 或者在Twitter上@markhneedham ,或给Neo4j DevRel团队发送电子邮件至devrel@neo4j.com。

翻译自: https://www.javacodegeeks.com/2017/03/neo4j-graphing-name-work-twitter-meme.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/350893.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 705 Design HashSet 解题报告

题目要求 Design a HashSet without using any built-in hash table libraries. To be specific, your design should include these functions: add(value): Insert a value into the HashSet. contains(value) : Return whether the value exists in the HashSet or not.remo…

ubuntu vim命令

打开默认命令模式&#xff0c;按 i键&#xff0c;进入编辑&#xff08;插入&#xff09;模式&#xff1b;编辑完&#xff0c;按Esc键回到命令模式&#xff0c;&#xff1a;&#xff08;冒号&#xff09;进入末行模式 进入编辑模式&#xff0c;键I a o 显示行号 在末行模式下&…

mt4 指标 涨跌幅 颜色k线_Tick级别K线显示指标

tick是指价格的波动&#xff0c;价格每波动一次&#xff0c;tick数加1。这是一个生成新K线图的指标&#xff0c;做这个指标的原因是因为我听说某个机构就是用的这种图表交易的&#xff0c;我在网上找了一下&#xff0c;本来我是想找个现成的Tick图指标看看效果的&#xff0c;结…

java程序打包为jar_将Java应用程序打包为一个(或胖)JAR

java程序打包为jar这篇文章将针对一个有趣但非常强大的概念&#xff1a;将您的应用程序打包为单个可运行的JAR文件&#xff0c;也称为一个或胖 JAR。 我们习惯了大型WAR归档文件&#xff0c;其中包含所有打包在某些常见文件夹结构下的依赖项。 使用类似于JAR的打包&#xff0c…

类定义注意点

1、类成员函数访问修饰const&#xff0c;申明和定义中须保持一致&#xff1b; class IntCell{... ; int read( ) const;...} int IntCell::read( ) const { return storedValue } 转载于:https://www.cnblogs.com/wllwqdeai/p/10691130.html

xshell最多支持4个_中集拉钢卷专用挂车来了!自重5吨,最多能装4个钢卷

【卡车之家 原创】“拉钢卷”在卡车行业里并不是一个好词&#xff0c;和它关联的有送车拉钢卷、断梁、超载、事故等。在钢卷运输领域&#xff0c;超载现象严重&#xff0c;行业很少使用专用车辆运输&#xff0c;因此导致了各类事故频发&#xff0c;最严重的当属去年无锡大桥垮塌…

ubuntu chmod更改权限

权限 chmod 全称 change modifiy - rw- rw- rwx d rw- rw- r— - 第1位是‘-’是文件 第1位是‘d’是文件夹 拥有着权限 用户组权限 其他人权限 rwx 可读可写可执行 rw- 可读可写 r-x 可读不可写可执行 。。。 chmod urwx 1.txt 文件拥有者有rwx权…

优先级反转解决方案

1. 优先级反转(Priority Inversion) 由于多进程共享资源&#xff0c;具有最高优先权的进程被低优先级进程阻塞&#xff0c;反而使具有中优先级的进程先于高优先级的进程执行&#xff0c;导致系统的崩溃。这就是所谓的优先级反转(Priority Inversion)。 2. 产生原因 其…

如何在Java地毯下有效地清除问题

因为软件错误可能使我们在开发人员面前看起来很糟糕&#xff0c;并导致其他人对我们的想法减少&#xff0c;所以最好避免编写错误&#xff0c;快速识别和修复错误或掩盖我们的错误。 有许多博客文章和文章讨论如何避免错误以及如何识别和修复错误&#xff0c;因此&#xff0c;在…

python多线程_python多线程:控制线程数量

背景前段时间学习了python的多线程爬虫&#xff0c;当时爬取一个图片网站&#xff0c;开启多线程后&#xff0c;并没有限制线程的数量&#xff0c;也就是说&#xff0c;如果下载1000张图片&#xff0c;会一次性开启1000个子线程同时进行下载 现在希望控制线程数量&#xff…

ubuntu 添加用户、用户组

添加用户 useradd xxx -m 创建一个xxx的用户 sudo passwd xxx 设置xxx用户的密码 su xxx 切换到xxx用户 su – xxx 切换到xxx用户&#xff0c;且家目录变为xxx家目录 whoami 看用户名 who 查看登录用户 exit …

python实践系列之(一)安装 python/pip/numpy/matplotlib

1.下载并安装Python3.4 在官网下载即可&#xff1a;Python官网 图1-1 图1-2打开Python图形界面&#xff1a; 图1-3 输入 2345&#xff0c;回车&#xff0c;出现如图&#xff0c;说明安装成功。 图1-42.安装pip &#xff08;1&#xff09;查看是否已安装pip 进入cmd命令窗口&…

2019-04(1)(Python学习)

9.1 迭代器 创建迭代器的3种方法&#xff1a; 方法一&#xff1a; 容器对象添加 __iter__() 和 __next__() 方法&#xff08;Python 2.7 中是 next()&#xff09;&#xff1b;__iter__() 返回迭代器对象本身 self&#xff0c;__next__() 则返回每次调用 next() 或迭代时的元素&…

ubuntu 查看进程信息

查看进程信息 ps ps -aux 查看所有进程&#xff0c;每行一个程序 top 显示当前运行程序 kill 98 &#xff08;98为PID号&#xff0c;&#xff09; kill -9 98 &#xff08;强制杀死98&#xff09;

浏览器崩溃_字节跳动程序员28岁身价上亿,财务自由宣布退休;微软最新系统再迎“喜报”:更多用户的浏览器开始崩溃...

新闻1&#xff1a;字节跳动程序员28岁身价上亿&#xff0c;财务自由宣布退休最近字节跳动前员工郭宇火了。原因是他在今年二月份发了一条微博。大概是说他在28岁的年纪实现了财务自由&#xff0c;然后选择了退休。郭宇本来是字节跳动的一名程序员&#xff0c;但现在已经离职去往…

Python图像处理库PIL中图像格式转换(一)

在数字图像处理中&#xff0c;针对不同的图像格式有其特定的处理算法。所以&#xff0c;在做图像处理之前&#xff0c;我们需要考虑清楚自己要基于哪种格式的图像进行算法设计及其实现。本文基于这个需求&#xff0c;使用Python中的图像处理库PIL来实现不同图像格式的转换。 对…

spring 构造函数注入_Spring构造函数注入和参数名称

spring 构造函数注入在运行时&#xff0c;除非在启用了调试选项的情况下编译类&#xff0c;否则Java类不会保留构造函数或方法参数的名称。 这对于Spring构造函数注入有一些有趣的含义。 考虑以下简单的类 package dbg; public class Person {private final String first;pr…

C#基础加强(8)之委托和事件

委托 简介 委托是一种可以声明出指向方法的变量的数据类型。 声明委托的方式 格式&#xff1a; delegate <返回值类型> 委托类型名(参数) &#xff0c;例如&#xff1a; delegate void MyDel(string str) 。 // 注意&#xff1a;这里除了前面的 delegate 关键字&#xff…

模板类的析构函数如何写_顶尖文案如何写?这6大模板、29个方法,奥美大咖都在用!|优惠最后1天...

敲黑板划重点&#xff1a;《顶尖文案训练营》第5期将于2月20日(正月十六)开班&#xff0c;现在报名享受春节特惠8折优惠&#xff0c;今天是优惠最后1天&#xff01;先到先得&#xff0c;速速报名抢位&#xff5e;马上就是2.14情人节了&#xff0c;馒火火在这里提前祝大家情人节…

ubuntu 查看日历,日期

cal 查看当前月日历 cal -y 2008 查看2008年日历 cal -y 2008 > 123.txt 打印到123.txt date 当前日期具体时间 date “%y年%m月%d日”