Coding获取站点中被任何用户标记为I like it的项

本文详细介绍了如何在SharePoint2010环境中,通过提升权限的方法查询特定内容被用户标记为Ilikeit的次数,并提供了相关代码实现。适用于解决在开发过程中遇到的用户权限提升与查询特定标签数量的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近,我做了一个在SharePoint2010中查询出所有被任何用户tag为I like it的content。在开发的过程中遇到两个问题:第一个是用户权限的提升,虽然模拟了SharePoint\system账号,但是创建的SocialTagManager对象的IsSocialAdmin属性始终是false.只有在User Profile Service Application中将当前用户设置为Administrator才查询出了所有数据。但是其他用户登录,不可能给其开放Administrator的权限。E___6706EN00SIGG.gif因此,要查询出所有的I Like it,还是必须从提升权限下手。遇到的第二个问题就是,如果查询出一个Uri被tag为I like it多少次?

后来,经过研究前辈们的提升权限的方法。总算发现了怎么把当前上下文提升为管理员账号。并查询出一个Uri被tag为 I like it的次数。E___7474ZH00SIGG.gif 我将实现的方法Share出来,希望对跟我遇到同样问题的朋友们能有所帮助。

下面的代码是关于如何将当前上下文临时提升为管理员权限,注意HttpContext.Current必须在RunWithElevatedPrivileges的委托方法里面设置为NULL。

 1 SPSecurity.RunWithElevatedPrivileges(delegate
2 {
3 System.Web.HttpContext tempCtx = System.Web.HttpContext.Current;
4 //emulate a system account
5 using (SPSite site = new SPSite(SPContext.Current.Web.Site.Url, SPContext.Current.Web.Site.SystemAccount.UserToken))
6 {
7 //remove current user's context
8 System.Web.HttpContext.Current = null;
9 }
10 }

  

而对于第二个问题(查询I like it个数的),使用SocialTagManager.GetTerms()方法,传入要查询的Url,方法会返回所有给url上标记的SocialTerm。使用Linq找到I like it的SocialTerm。它有一个Count的属性,这个属性在MSDN上没有描述它的用途。通过测试,我发现它就是当前I like it被标记的个数。如果用户上下文没有提升到System Account的权限,那么找出来的值就始终是1或者0.

下面是所有的相关的代码:

  1  public partial class SocialTaggedUrlListsWebPartUserControl : UserControl
2 {
3 /// <summary>
4 /// Get or set a value that specifies the maximum number of the results
5 /// </summary>
6 public int Maxinum
7 {
8 get;
9 set;
10 }
11
12 /// <summary>
13 /// Get or set a value that specifes the SocialTag Name which is used to search url.
14 /// </summary>
15 public string SocialTagName
16 {
17 get;
18 set;
19 }
20
21 private class TaggedItem
22 {
23 public TaggedItem(string title, string url, string iconUrl, int tagPeopleNum)
24 {
25 this.Title = title;
26 this.Url = url;
27 this.IconUrl = iconUrl;
28 this.TagPeopleNum = tagPeopleNum;
29 }
30
31 /// <summary>
32 /// Get or set the Title property of TaggedItem object
33 /// </summary>
34 public String Title
35 {
36 get;
37 set;
38 }
39
40 /// <summary>
41 /// Get or set the Url property of TaggedItem object
42 /// </summary>
43 public string Url
44 {
45 get;
46 set;
47 }
48
49 /// <summary>
50 /// Get or set the IconUrl property
51 /// </summary>
52 public string IconUrl
53 {
54 get;
55 set;
56 }
57
58 /// <summary>
59 /// Get or set the TagPeopleNum property ,which is used to specify the number of poeple who tagged the url with the specified SocialTag.
60 /// </summary>
61 public int TagPeopleNum
62 {
63 get;
64 set;
65 }
66 }
67
68 protected void Page_Load(object sender, EventArgs e)
69 {
70
71 }
72
73 protected override void Render(HtmlTextWriter writer)
74 {
75 base.Render(writer);
76 SPSecurity.RunWithElevatedPrivileges(delegate
77 {
78 System.Web.HttpContext tempCtx = System.Web.HttpContext.Current;
79 try
80 {
81 //emulate a system account
82 using (SPSite site = new SPSite(SPContext.Current.Web.Site.Url, SPContext.Current.Web.Site.SystemAccount.UserToken))
83 {
84 string rootUrl = SPContext.Current.Site.Url;
85
86 //remove current user's context
87 System.Web.HttpContext.Current = null;
88
89 SPServiceContext serverContext = SPServiceContext.GetContext(site);
90 SocialTagManager socialTagManager = new SocialTagManager(serverContext);
91 //get a term named 'I like it'
92 TaxonomySession taxonomySession = new TaxonomySession(site);
93 Term term = taxonomySession.GetTerms(SocialTagName, true).First();
94 if (term != null)
95 {
96 //get an array of all urls owned by any user with the specified Term, and the scope is current site.
97 SocialUrl[] socialUrls = FilterUrl(socialTagManager.GetAllUrls(term), rootUrl);
98 if (socialUrls.Length == 0)
99 {
100 writer.Write("There are no available items tagged with \"" + this.SocialTagName + "\"");
101 return;
102 }
103 using (SPWeb web = site.OpenWeb())
104 {
105 IList<TaggedItem> taggedItems = BuilderTaggedItem(web, socialTagManager, socialUrls, rootUrl);
106
107 if (taggedItems.Count == 0)
108 {
109 return;
110 }
111 //sort list by the Count property
112
113 writer.Write("<style>#topResultsTab td{ ");
114 writer.Write(" height:32px; ");
115 writer.Write(" border-bottom:1px dashed rgb(220,220,220); ");
116 writer.Write("} </style>");
117
118 writer.Write(" <div class='item link-item' style='padding-left: 5px; border-bottom: 1px rgb(235,235,235) dashed;padding-right: 5px;'>");
119
120 writer.Write("<table id=\"topResultsTab\" style=\"width:100%\">");
121
122
123 foreach (TaggedItem taggedItem in taggedItems)
124 {
125 writer.Write("<tr>");
126
127 writer.Write("<td style='width:18px; vertical-align: bottom; position: relative;'>");
128 writer.Write(string.Format("<img src='{0}' width='16px' height='16px'/> ", GlobalVariables.SYS_IMG_RELATIVE_PATH + taggedItem.IconUrl));
129 writer.Write("</td>");
130
131 writer.Write("<td style='font-weight: bold;font-size: 14px; vertical-align: bottom; position: relative;'> ");
132 writer.Write(string.Format("<a style='font-size: 14px' href='{0}' >{1}</a>", taggedItem.Url, taggedItem.Title));
133 writer.Write("</td>");
134
135 writer.Write("<td style='width:100px;vertical-align: bottom;color:#666; position: relative; text-align: left;'>");
136 writer.Write(string.Format("<img src='{0}allusr.gif' alt='People' width='16px' height='16px' style='vertical-align: bottom;position: relative; '/>", GlobalVariables.SYS_IMG_RELATIVE_PATH));
137 writer.Write(string.Format("<span >Tagged by <a href='javascript:;' class='people' msItemUrl='{0}'> {1} </a></span>", taggedItem.Url, taggedItem.TagPeopleNum));
138 writer.Write("</td>");
139
140 writer.Write("</tr>");
141 }
142 }
143 }
144 else
145 {
146 writer.Write("There are no available items tagged with \"" + this.SocialTagName + "\"");
147 }
148 writer.Write("</table>");
149 writer.Write("</div>");
150 }
151 }
152 catch (Exception ex)
153 {
154 writer.Write(ex.Message);
155 }
156 finally
157 {
158 System.Web.HttpContext.Current = tempCtx;
159 }
160 });
161 }
162
163
164
165 private SocialUrl[] FilterUrl(SocialUrl[] socialUrls, string filterUrl)
166 {
167 IList<SocialUrl> filteredUrls = new List<SocialUrl>();
168 int index = 0;
169 for (int i = 0; i < socialUrls.Length; i++)
170 {
171 if (socialUrls[i].Url.AbsoluteUri.StartsWith(filterUrl))
172 {
173 filteredUrls.Add(socialUrls[i]);
174 index++;
175 }
176 }
177 return filteredUrls.ToArray();
178 }
179
180
181 private IList<TaggedItem> BuilderTaggedItem(SPWeb web, SocialTagManager socialTagManager, SocialUrl[] socialUrls, string rootUrl)
182 {
183 //retrieve the number of terms associated with a specified url by the specified tag name .
184 IList<object> socialTagList = new List<object>();
185 for (int i = 0; i < socialUrls.Length; i++)
186 {
187 IList<SocialTerm> list = socialTagManager.GetTerms(socialUrls[i].Url, 100).Where(v => v.Term.Name.Equals(SocialTagName, StringComparison.CurrentCultureIgnoreCase)).ToList();
188 socialTagList.Add(new { Url = socialUrls[i], Count = list.Count > 0 ? list[0].Count : 0, ModefiedData = socialUrls[i].LastModifiedTime });
189 }
190
191 socialTagList = socialTagList.OrderByDescending(v => v.GetType().GetProperty("Count").GetValue(v, null)).ToList();
192
193 IList<TaggedItem> taggedItems = new List<TaggedItem>();
194
195 for (int i = 0; i < socialTagList.Count; i++)
196 {
197 TaggedItem taggedItem = null;
198 object obj = null;
199 string icon = string.Empty;
200 SocialUrl socialUrl = socialTagList[i].GetType().GetProperty("Url").GetValue(socialTagList[i], null) as SocialUrl;
201 int pepleNum = Convert.ToInt32(socialTagList[i].GetType().GetProperty("Count").GetValue(socialTagList[i], null));
202          SPWeb correctWeb= GetWeb(web, socialUrl.Url.AbsoluteUri);
                   try
                   {
                    obj = correctWeb.GetObject(socialUrl.Url.AbsoluteUri);
                   }
                   catch
                   {
                       continue;
                   }
216                 if (obj is SPListItem)
217 {
218 SPListItem spListItem = obj as SPListItem;
219 icon = Microsoft.SharePoint.Utilities.SPUtility.MapToIcon(web, socialUrl.Title, spListItem.ProgId);
220 taggedItem = new TaggedItem(spListItem.Title, socialUrl.Url.AbsoluteUri, icon, pepleNum);
221 }
222 else if (obj is SPFile)
223 {
224 SPFile spFile = obj as SPFile;
225 taggedItem = new TaggedItem(socialUrl.Title, socialUrl.Url.AbsoluteUri, spFile.IconUrl, pepleNum);
226 }
227 else if (obj is SPFolder)
228 {
229 SPFolder spFolder = obj as SPFolder;
                      string title = string.IsNullOrEmpty(spFolder.Name) ? socialUrl.Title : spFolder.Name;
                      if ((socialUrl.Url.AbsoluteUri.EndsWith("/") ? socialUrl.Url.AbsoluteUri.Remove(socialUrl.Url.AbsoluteUri.Length - 1, 1) : socialUrl.Url.AbsoluteUri)
                        .Equals(
                        correctWeb.Url.EndsWith("/") ? correctWeb.Url.Remove(correctWeb.Url.Length - 1, 1) : correctWeb.Url))
                      {
                          title = string.IsNullOrEmpty(correctWeb.Title) ? "" : (correctWeb.Title+"-") + title;
                      }
                      icon = Microsoft.SharePoint.Utilities.SPUtility.MapToIcon(web, string.Empty, spFolder.ProgID);
                      taggedItem = new TaggedItem(title, socialUrl.Url.AbsoluteUri, "FOLDER.GIF", pepleNum);

232 }
233 else
234 {
235 taggedItem = new TaggedItem(socialUrl.Title, socialUrl.Url.AbsoluteUri, string.Empty, pepleNum);
236
237 }
238 if (string.IsNullOrEmpty(taggedItem.IconUrl))
239 {
240 taggedItem.IconUrl = "icgen.gif";
241 }
242 taggedItems.Add(taggedItem);
243 if (taggedItems.Count >= this.Maxinum)
244 {
245 break;
246 }
247 }
248 return taggedItems;
249 }
250
251 }

  

转载于:https://www.cnblogs.com/snailJuan/archive/2011/07/28/2119822.html

""" @author: jtahstu @contact: root@jtahstu.com @site: http://www.jtahstu.com @time: 2017/12/10 00:25 """ # -*- coding: utf-8 -*- import requests from bs4 import BeautifulSoup import time from pymongo import MongoClient headers = { 'x-devtools-emulate-network-conditions-client-id': "5f2fc4da-c727-43c0-aad4-37fce8e3ff39", 'upgrade-insecure-requests': "1", 'user-agent': "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36", 'accept': "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8", 'dnt': "1", 'accept-encoding': "gzip, deflate", 'accept-language': "zh-CN,zh;q=0.8,en;q=0.6", 'cookie': "__c=1501326829; lastCity=101020100; __g=-; __l=r=https%3A%2F%2Fwww.google.com.hk%2F&l=%2F; __a=38940428.1501326829..1501326829.20.1.20.20; Hm_lvt_194df3105ad7148dcf2b98a91b5e727a=1501326839; Hm_lpvt_194df3105ad7148dcf2b98a91b5e727a=1502948718; __c=1501326829; lastCity=101020100; __g=-; Hm_lvt_194df3105ad7148dcf2b98a91b5e727a=1501326839; Hm_lpvt_194df3105ad7148dcf2b98a91b5e727a=1502954829; __l=r=https%3A%2F%2Fwww.google.com.hk%2F&l=%2F; __a=38940428.1501326829..1501326829.21.1.21.21", 'cache-control': "no-cache", 'postman-token': "76554687-c4df-0c17-7cc0-5bf3845c9831" } conn = MongoClient('127.0.0.1', 27017) db = conn.iApp # 连接mydb数据库,没有则自动创建 def init(): items = db.jobs_php.find().sort('pid') for item in items: if 'detail' in item.keys(): # 在爬虫挂掉再此爬取时,跳过已爬取的行 continue detail_url = "https://www.zhipin.com/job_detail/%s.html?ka=search_list_1" % item['pid'] print(detail_url) html = requests.get(detail_url, headers=headers) if html.status_code != 200: # 爬的太快网站返回403,这时等待解封吧 print('status_code is %d' % html.status_code) break soup = BeautifulSoup(html.text, "html.parser") job = soup.select(".job-sec .text") if len(job) < 1:
03-18
基于数据挖掘的音乐推荐系统设计与实现 需要一个代码说明,不需要论文 采用python语言,django框架,mysql数据库开发 编程环境:pycharm,mysql8.0 系统分为前台+后台模式开发 网站前台: 用户注册, 登录 搜索音乐,音乐欣赏(可以在线进行播放) 用户登陆时选择相关感兴趣的音乐风格 音乐收藏 音乐推荐算法:(重点) 本课题需要大量用户行为(如播放记录、收藏列表)、音乐特征(如音频特征、歌曲元数据)等数据 (1)根据用户之间相似性或关联性,给一个用户推荐与其相似或有关联的其他用户所感兴趣的音乐; (2)根据音乐之间的相似性或关联性,给一个用户推荐与其感兴趣的音乐相似或有关联的其他音乐。 基于用户的推荐和基于物品的推荐 其中基于用户的推荐是基于用户的相似度找出相似相似用户,然后向目标用户推荐其相似用户喜欢的东西(和你类似的人也喜欢**东西); 而基于物品的推荐是基于物品的相似度找出相似的物品做推荐(喜欢该音乐的人还喜欢了**音乐); 管理员 管理员信息管理 注册用户管理,审核 音乐爬虫(爬虫方式爬取网站音乐数据) 音乐信息管理(上传歌曲MP3,以便前台播放) 音乐收藏管理 用户 用户资料修改 我的音乐收藏 完整前后端源码,部署后可正常运行! 环境说明 开发语言:python后端 python版本:3.7 数据库:mysql 5.7+ 数据库工具:Navicat11+ 开发软件:pycharm
MPU6050是一款广泛应用在无人机、机器人和运动设备中的六轴姿态传感器,它集成了三轴陀螺仪和三轴加速度计。这款传感器能够实时监测并提供设备的角速度和线性加速度数据,对于理解物体的动态运动状态至关重要。在Arduino平台上,通过特定的库文件可以方便地与MPU6050进行通信,获取并解析传感器数据。 `MPU6050.cpp`和`MPU6050.h`是Arduino库的关键组成部分。`MPU6050.h`是头文件,包含了定义传感器接口和函数声明。它定义了类`MPU6050`,该类包含了初始化传感器、读取数据等方法。例如,`begin()`函数用于设置传感器的工作模式和I2C地址,`getAcceleration()`和`getGyroscope()`则分别用于获取加速度和角速度数据。 在Arduino目中,首先需要包含`MPU6050.h`头文件,然后创建`MPU6050`对象,并调用`begin()`函数初始化传感器。之后,可以通过循环调用`getAcceleration()`和`getGyroscope()`来不断更新传感器读数。为了处理这些原始数据,通常还需要进行校准和滤波,以消除噪声和漂移。 I2C通信协议是MPU6050与Arduino交互的基础,它是一种低引脚数的串行通信协议,允许多个设备共享一对数据线。Arduino板上的Wire库提供了I2C通信的底层支持,使得用户无需深入了解通信细节,就能方便地与MPU6050交互。 MPU6050传感器的数据包括加速度(X、Y、Z轴)和角速度(同样为X、Y、Z轴)。加速度数据可以用来计算物体的静态位置和动态运动,而角速度数据则能反映物体转动的速度。结合这两个数据,可以进一步计算出物体的姿态(如角度和角速度变化)。 在嵌入式开发领域,特别是使用STM32微控制器时,也可以找到类似的库来驱动MPU6050。STM32通常具有更强大的处理能力和更多的GPIO口,可以实现更复杂的控制算法。然而,基本的传感器操作流程和数据处理原理与Arduino平台相似。 在实际应用中,除了基本的传感器读取,还可能涉及到温度补偿、低功耗模式设置、DMP(数字运动处理器)功能的利用等高级特性。DMP可以帮助处理传感器数据,实现更高级的运动估计,减轻主控制器的计算负担。 MPU6050是一个强大的六轴传感器,广泛应用于各种需要实时运动追踪的目中。通过 Arduino 或 STM32 的库文件,开发者可以轻松地与传感器交互,获取并处理数据,实现各种创新应用。博客和其他开源资源是学习和解决问题的重要途径,通过这些资源,开发者可以获得关于MPU6050的详细信息和实践指南
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值