百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

列表里那些“默默互关”的人,用一小段代码就能知道了

bigegpt 2024-12-31 09:32 2 浏览

全文共2524字,预计学习时长14分钟



不是所有的社交媒体都可以显示互关列表的。Facebook上可以清晰地看到哪些是你的朋友,Instagram也能让你看到自己关注的人是否也关注了自己。


但Medium却不然。虽然可以显示粉丝和关注的人有哪些,但怎样才能知道与自己“互相关注”的人有哪些呢?


一种方法是:在你长长的粉丝栏里面,不断刷屏,希望无意中能发现里面带绿勾的地方(网页浏览器则为黑色),这种方法枯燥、无聊还很耗时。要是正在浏览其他人的个人资料,这种方法就真的太繁琐了,你得记下在“粉丝”一栏和“关注的人”一栏中同时出现的Medium用户。


现在,一小段代码就能将你从枯燥、无聊、耗时的刷屏中解救出来。最重要的是,无需学习编码知识,你就可以轻松找到“好朋友”!


Python脚本


接下来要用到的逻辑原理,是我们在高中时就学过的有趣的集合概念——维恩图。下图便说明了在Medium上找互关对象的逻辑原理:


为了能把这个维恩图用到实际操作中,我们用Python编写了一个脚本,通过链接的方式发送给用户。同时,我们也会获得该Medium用户所有的followers和following。


通过利用这一基础集合知识,我们创建了代表followers与following交集的互关列表,并将列表导出到一个CSV文件中。以下便是这个Python脚本:


import requests
        import json
        import csv
        import sys
             MEDIUM='https://medium.com'
             deflist_to_csv(medium_friends):
            withopen('yay3.csv', 'a') as file:
                writer = csv.writer(file)
                writer.writerow(("ID", "Name"))
                     for key, value in medium_friends.items():
                    writer.writerow([MEDIUM+'/@'+key, value])
             defcommon_member(a, b):
            a_set =set(a)
            b_set =set(b)
                 common = []
                 if (a_set & b_set):
                print(a_set & b_set)
                common = a_set & b_set
            else:
                print("No commonelements")
                 return common
             defclean_json(response):
            return json.loads(response.text.replace('])}while(1);</x>', '', 1))
             # Get the UserID from a Medium Username
        defget_user_id(username):
                 print('Retrieve UserID...')
                 url =MEDIUM+'/@'+ username +'?format=json'
            response = requests.get(url)
            response_dict =clean_json(response)
            return response_dict['payload']['user']['userId']
             defget_list_of_users(user_id, user_type):
                 next_id =False
            my_dict = {}
                 whileTrue:
                     if next_id:
                    url =MEDIUM+'/_/api/users/'+ user_id +'/'+ user_type +'?limit=8&to='+ next_id
                else:
                    url =MEDIUM+'/_/api/users/'+ user_id +'/'+ user_type
                     response = requests.get(url)
                response_dict =clean_json(response)
                     for user in response_dict['payload']['value']:
                         print(user['username'])
                    my_dict[user['username']] = user['name']
                     try:
                    next_id = response_dict['payload']['paging']['next']['to']
                except:
                    break
                 return my_dict
             defmain(name):
                 user_id =get_user_id(name)
            print(user_id)
                 following =get_list_of_users(user_id, 'following')
            followers =get_list_of_users(user_id, 'followers')
                 common =common_member(followers.keys(), following.keys())
            filtered_dictionary =dict((k, following[k]) for k in common if k in following)
                 list_to_csv(filtered_dictionary)
             if __name__ =="__main__":
            iflen(sys.argv) >1:
                main(sys.argv[1])
            else:
                raiseSystemExit("usage: python filename.py <username>")


我们有两种方法可以运行该程序:


· 在系统上操作命令行。

· 复制粘贴脚本到在线编译器。

操作命令行


首先,启动命令行终端或提示符,并查看是否已经安装了Python 3。


如果用的是macOS系统


假设Python已经在系统上安装好了。键入python --version确定版本。如果是2.7以上3以下的版本,就可以粘贴以下命令,按回车键,然后输入管理员密码进行安装:


/usr/bin/ruby -e "$(curl -fsSLhttps://raw.githubusercontent.com/Homebrew/install/master/install)"


刚刚已经安装了Homebrew软件包,现在可以继续安装所需的软件。这次我们用Python3进行演示:


brew install python3


如果用的是Windows系统


倘如已经安装了Python,键入python –version,就会显示出Python的版本号;如果还没有安装,或者安装的是Python3以前的版本,需要查找最新稳定版本。


Python安装程序下载后,根据安装向导进行操作,几分钟后,Python程序就安装好了。



现在已经安装好了Python3。接着,如果使用的是Windows系统,就输入python,如果使用的是macOS系统,就输入python3,按空格键,将文件拖放到终端中,再按空格键,然后输入你的Medium用户名。



最后,只要按下回车键,你就可以去冲一杯咖啡,等着脚本帮你搜索与你互关的Medium用户啦。


生成的CSV文件中显示了每个与你互关的Medium用户以及他们的个人资料连接。以下是运行上述脚本时的截屏:


复制粘贴脚本到在线编译器


如果命令行不对你的胃口,可以跳转这个在线编译器anupamchugh/0ad2c9dfbaa8e7d8dbf2bf10f515b0fa)。


现在,需要确保两件事:


· 确保右上角选择的语言是Python3。

· 将Medium用户名放入特定行中(下图中突出显示的行):


这种方法的唯一不足是无法轻松导出CSV文件,最终结果只能出现在屏幕底部。


如何找到第X位与你互关的用户


有时,你可能很着急,或者你的粉丝很多,并且希望在找到第X位与你互关的用户时就停止运行该程序。这很简单:


· 首先获取following列表(假设比粉丝列表要少)

· 在获取followers列表(从网址中获取,以8个为一批)时,搜索一下following集合中的元素是否也在followers列表里面。

· 一旦从followers列表中检索到第X个following用户,程序就会输出结果并停止运行。



在命令行上运行


来看看用于查找第X位互关用户的脚本:https://gist.github.com/anupamchugh/c738e8f76431ac81b31db30a458c41bf


运行该脚本,只需在终端上的python命令中添加一个数字(比如10)到Medium用户名后面。如果不输入一个数字,那么与你互关的用户都将被提取出来。以下是命令示范:


#Find first 10 mutual connections
python3 script_file_name.py anupamchugh 10


在线编译器上运行


这是修改后的脚本(https://gist.github.com/anupamchugh/a87e5317083c59acacca9229b3f2a364),可以输入你的用户名并选择号码在在线编译器上运行:


怎样才能知道两个Medium用户是否互关


只想知道两个Medium 用户是否互关,而不是获取全部的互关列表呢?


例如,想知道用户A和B是否互关,我们可能会在用户B的“following”列表中查找是否存在用户A,反之亦然。以下四种情况都是可能的:


根据这一逻辑,我们设计了一种Python脚本(https://gist.github.com/anupamchugh/9833a433b51ea32fecb3dcd276a50567),该脚本要求上传每位Medium用户的两个用户参数。


该脚本在用户B的following列表中搜索A的username,反过来也是一样的(假设你关注的人少于你的粉丝数量)。


现在,在macOS命令行提示下运行以下命令,看看得到的输出:


python3 two_medium_users.pyanupamchugh elye.project


你可以随意替换用户名name1和name2,就可以在别人的粉丝列表中找到你认识的人啦。



用API(应用程序接口)或检查网站可以创建更多分析工具、查找模式。例如,Medium用户的数据就包含了以下值:isMembershipTrialEligible , isWriterProgram mediumMemberAt等。


快去找找与你默默互关的小伙伴吧!


留言点赞关注

我们一起分享AI学习与发展的干货

如转载,请后台留言,遵守转载规范

相关推荐

为3D手游打造, Visual Studio Unity扩展下载

IT之家(www.ithome.com):为3D手游打造,VisualStudioUnity扩展下载7月30日消息,微软正式发布升级版VisualStudioToolsforUnity扩...

由ArcMap属性字段自增引出字段计算器使用Python的技巧

1.前言前些日子有人问我ArcMap中要让某个字段的值实现自增有什么方法?我首先想到像SQLServer中对于数值型字段可以设置自增。所以我打开ArcCatalog查看发现只提供默认值,没办法只能看...

微软首次回答 HoloLens 相关问题,终于爆料了

fengo2015/04/2115:11注:本文作者张静是NVIDIAGPU架构师,微信公众号“黑客与画家”(HackerAndPainter),知乎专栏地址。欢迎各位童鞋与他交流探讨。...

C#指针的应用(c#指针类型)

C#在有限的范围内支持指针。C#的指针只不过是一个持有另一类型内存地址的变量。但是在C#中,指针只能被声明为持有值类型和数组的内存地址。与引用类型不同,指针类型不被默认的垃圾收集机制所跟踪。出于同...

C# 堆栈(Stack)(c# 堆栈中定位调用messagebox 的地方)

C#集合在C#中,堆栈(Stack)是一种后进先出(LIFO,LastInFirstOut)的数据结构。堆栈(Stack)适用于存储和按顺序处理数据,其中最新添加的元素会最先被移除。堆...

欢迎回来:Fortran意外重回流行编程语言20强榜单

TIOBE指数是用来确定一种编程语言受欢迎程度的指标之一。它并不表明哪种编程语言是最好的,也不表明哪种编程语言写的代码行数最多,而是利用在谷歌、维基百科、必应、亚马逊、YouTube等各种引擎和网站上...

C#+NET MAUI实现跨平台/终端(linux,win,ios等)解决方案

简介.NETMulti-platformAppUI(.NETMAUI)是一个跨平台的框架,用于使用C#和XAML创建移动和桌面应用程序。使用.NETMAUI,您可以用一套代码库开发可以在A...

C#代码安全红线:SQL注入防护终极方案,让你的系统固若金汤

在数字化时代,应用系统的安全性至关重要。而SQL注入攻击,长期盘踞在OWASP(OpenWebApplicationSecurityProject)漏洞榜单的前列,成为众多基于数据库的应用系统...

C# (一)状态机模式(状态机代码实现)

最近空闲,炒炒隔夜饭,以前这些模式在自己项目种应用过不少,但一直没有像别人那样写一个系列,最近年纪大了,很多东西都忘记了,特别AI的兴起,更少写代码了,反正没什么事情,自己在重写一遍吧。创建型模式(5...

C# 中 Predicate 详解(c#中的replace)

Predicate泛型委托:表示定义一组条件并确定指定对象是否符合这些条件的方法。此委托由Array和List类的几种方法使用,用于在集合中搜索元素。Predicate<T>...

C#中$的用法?(c#中&&什么意思)

文章来自AI问答。在C#中,$符号用于字符串插值(StringInterpolation)。字符串插值是C#6.0引入的一种特性,它允许你在字符串中直接嵌入表达式,而不需要使用string.For...

C#并行编程:Parallel类(c# 并行处理)

在Parallel类中提供了三个静态方法作为结构化并行的基本形式:Parallel.Invoke方法:并行执行一组委托。Parallel.For方法:执行与C#for循环等价的并行方法。Parall...

颠覆认知!用Span重构foreach循环竟让数据处理快如闪电

在C#编程的世界里,数据处理效率始终是开发者们关注的焦点。随着项目规模的扩大和数据量的激增,哪怕是细微的性能提升,都可能对整个应用的响应速度和用户体验产生深远影响。近年来,C#引入的Span<T...

Unity3D手游开发实践《腾讯桌球》客户端开发经验总结

本次分享总结,起源于腾讯桌球项目,但是不仅仅限于项目本身。虽然基于Unity3D,很多东西同样适用于Cocos。本文从以下10大点进行阐述:1.架构设计2.原生插件/平台交互3.版本与补丁4.用脚本,...

.NET 7 AOT 的使用以及 .NET 与 Go 互相调用

目录背景C#部分环境要求创建一个控制台项目体验AOT编译C#调用库函数减少体积C#导出函数C#调用C#生成的AOTGolang部分安装GCCGolang导出函数.NETC#...