官方社群在线客服官方频道防骗查询货币工具

Drug Discov Today|挖掘社交媒体数据,促进药物开发的方法和案例

2025-01-13 01:22:07
news.like.tgnews.like.tgnews.like.tgnews.like.tg

LIKE.TG 成立于2020年,总部位于马来西亚,是首家汇集全球互联网产品,提供一站式软件产品解决方案的综合性品牌。唯一官方网站:www.like.tg

2021年9月1日,来自德国维滕/赫德克大学的Jonathan Koss等人在Drug Discovery Today合作发表综述,对使用社交媒体数据促进药物开发的基础方法和案例进行了介绍。

亮点

• 在药物开发的初始阶段,可以基于社交媒体数据进行患者偏好研究,根据患者未被满足的临床需求确定相关决策的优先级。

• 典型的 SMM 管道包括从社交媒体平台中获取见解的5个基本阶段:资源识别、数据提取、数据预处理数据分析和评估。

• 提出了5个使用案例,说明SMM如何促进以患者为中心的药物发现。

以下是全文内容。

摘要

从现代商业动态的角度来看,将患者的观点融入药物的发现和开发已变得至关重要。患者在社交媒体上讲述他们的疾病经历已有趋势。通过分析与此类社交媒体帖子相关的数据获得的见解,可以用来支持以患者为中心的药物开发。对这些数据进行手动分析几乎是不可能的,但人工智能实现了自动化和经济高效的处理,也称为社交媒体挖掘 (SMM, social media mining)。本文讨论了SMM的基本方法以及在一些相关的药物开发中的使用案例。

前言

传统制药企业专注于开发尖端药物,这些尖端药物可以带来可观的收入,以覆盖其始终高昂的研发成本。这种具有数十年历史且成功的商业模式,目前面临着技术演变和监管变化带来的若干挑战。不断变化的护理标准造成的"better-than-the-Beatles"的问题是此类挑战的常见示例。此外,药品监管部门在药品审批、定价和/或报销相关决策中越来越多地考虑患者感知到的获益,包括在健康技术评估中考虑患者报告结局(PROs, patient-reported outcomes) 。FDA的以患者为中心的药物开发计划设想将患者的观点纳入药物审批过程。

因此,制药公司面临着解决与患者最相关的未满足医疗需求 (UMNs, unmet medical needs) 的要求。UMN 的特征可能与死亡率、症状或疾病负担、治疗副作用或治疗不便性、患者感知和患病时间有关。例如,药丸的大小可能会给敏感患者带来不便或不适,从而导致他们的不满和减少对处方治疗的坚持。因此,作为有效解决现有UMN的一种手段,越来越多的制药公司正系统地将患者观点融入其药物开发过程,开展"以患者为中心的药物开发(PCDD, patient-centered drug development)"。

例如,在药物开发的初始阶段可以进行患者偏好研究,根据患者UMN确定相关决策的优先级。从社交媒体中提取的见解也可用于通过描述患者 UMN 和探索创新机会来指导PCDD。长期研究表明,患有严重疾病和残疾的患者利用社交媒体寻求自助并分享他们的经验。这些潜在有价值的信息数量之多,使其手动分析效率极低,几乎不可能。同时,基于人工智能的方法(如社交媒体挖掘),为人工处理来自社交媒体的数据提供了具有成本效益的替代方案。本文讨论了SMM的基本原理,并讨论了与药物开发过程相关的几个SMM使用案例。

什么是SMM?

SMM 是最近出现的跨学科研究领域。虽然SMM与计算机科学有着根本的联系,但它可以用来提供与各种学科和应用相关的见解。从本质上讲,SMM 需要提取和分析从在线论坛、博客和社交媒体平台收集的数据,以获取有关特定社区及其成员的看法和需求的知识。这些知识的例子包括与某些疾病相关的特征或症状,以及他们的地理动态。社交媒体数据来源庞大且嘈杂,且大多由非结构化的文本数据组成,即使有最先进的自动分析流程和算法,这些数据也难以处理。

SMM管道

典型的 SMM 管道包括从社交媒体平台中获取见解的5个基本阶段:资源识别、数据提取、数据预处理、数据分析和评估(图 1)。有关每个阶段的细节可能因最终应用而异,但构建模块基本一致。

图1 典型的社交媒体挖掘(SMM) 管道中涉及的步骤,以及实施过程中产生的实际影响和表现。

资源识别

一般来说,有关健康相关主题的信息可从社交媒体平台(如 Facebook、Twitter、Instagram、Reddit 和针对健康的特定在线论坛)中提取。但是,这些平台具有特殊性,在决定特定平台作为数据源时应考虑这些特性。这些平台的数据质量存在根本差异,因为它们的基本业务模式不同,如表1所述。

Facebook 和 Instagram 主要旨在通过投放广告来创造利润,而其它在线论坛往往是非营利性的,很少有广告,有时完全没有广告。平台上运行的广告越多,从探索与健康相关的研究课题和回答相关问题的角度出发,内容(数据)的质量就越低。例如,如果研究问题特别关注患者使用特定药物的经验,则企业广告可能会偏向结果。这要求将广告数据排除在随后的分析之外。

相比之下,在线医疗保健论坛上的帖子通常很长,包括更多与上下文构建和作者背景相关的信息。此信息会影响后续分析,并可能产生更有意义的结果,甚至来自同一用户。此外,在线论坛通常提供与特定主题相关的信息(例如乳腺癌),而Twitter 等平台则提供对各种主题的讨论。因此,能够从非特定平台提取相关信息的SMM管道总是复杂的,需要使用尖端技术来产生预期的结果。此外,在线论坛的用户通常比Facebook和Twitter等热门平台用户少,内容托管更少。因此,此类平台上的数据很少,样本量也较小。应仔细选择SMM数据源,同时考虑上述方面,并根据最终应用权衡其相关性。

表1 社交媒体平台和其提供数据质量的差异

数据提取

一旦选择一个或多个合适的社交媒体平台作为数据源,就可以使用集中爬虫和网络爬虫技术进行自动数据提取。集中爬虫是指收集符合特定标准网站的自动化过程:例如,该过程可能会"收集所有有关阿尔茨海默症的网站"或"从co.uk 域名收集所有有关公共卫生主题的网站"。为了保持聚焦并排除许多不相关的站点,应在爬虫算法中仔细管理超链接分析和优先级流程。

在SMM方面,可以采取两种方法。作为第一种方法,Twitter 提供了一个应用程序程序接口(API),它为用户提供直接访问其内容(即Twitter帖子)的机会。但是,患者论坛不提供此服务,必须使用第三方工具或软件来访问其数据。在第二种方法中,爬虫算法模拟 Web 服务器与其用户之间的浏览交互。随时间推移,这些算法可以访问尽可能多的网站,以识别相关数据。找到所需数据后,可以使用网络爬虫来提取感兴趣的数据。必须遵守法律限制,如数据隐私法和主机平台政策。

数据预处理

社交媒体内容主要包括非结构化文本,因此在预处理过程中使用自然语言处理(NLP) 技术对于降低噪音和构建数据以促进有见地的分析至关重要。

预处理可分为两个步骤:数据准备和数据简化。

重要的数据准备技术包括数据清理、数据标准化和数据转换数据清理可确保完整、无重复(例如,通过删除转帖)、简洁的(例如,通过删除停止字眼)数据集的可用性。数据标准化是指用适当的技术术语取代社交媒体帖子中常用的不精确的医疗术语和概念。值得注意的是,虽然拼写错误的单词很容易纠正,但俚语和缩写的修订仍然是一个重大挑战。数据转换是指将提取的数据转换为适合分析的格式。例如,使用基于规则的算法从帖子中提取患者症状并以结构化格式存储这些症状。

数据简化技术通过功能转换、实例选择和功能选择降低数据维度。功能转换方法将原始数据功能压缩为小功能集,在处理高维文本数据时至关重要。此外,它们排除了与分析无关的词语,从而降低了维度。实例选择方法可减少数据集大小(例如,通过排除不相关的帖子),而不会丢失相关信息。

数据预处理以功能选择结束,该选择旨在尽可能消除不相关和冗余的功能。一般来说,数据预处理需要调整现有技术,以解决手头的问题和后续分析的性质。这意味着,一个给定的问题可以使用几个技术解决,如图2所示。但是,当选择使用无监督学习进行分析时,此步骤是毫无根据的。

图2 社交媒体挖掘 (SMM) 使用案例和管道的概述。根据用例类型,可能需要合并多个数据源和方法。数据源可分为特定和非特定平台。提取数据的预处理具有高度可变性,决定了后续分析结果的质量。因此,预处理管道的开发通常需要大部分开发时间。一般来说,通过受监督的机器学习 (ML) 方法对数据进行分析需要实例选择来准备数据集,数据集可以通过人工注释(数据转换的主要任务)高效标记。在通过无监督的机器学习分析数据时,不需要人工注释。功能转换和选择是指提取适当的数据特征,有利于数据分析。不同的特征可以具有语义、结构或人口特征。后续分析可能涉及各种 ML 算法、启发式算法或指标。分析结果必须由域专家进行评估,或(如果可用)根据金本位制进行评估。

分析

在分析社交媒体内容时使用的最先进的方法包括ML、启发式方法和特定指标法 (图2)。

相关的ML方法可以分为监督学习法和无监督学习法。无监督的ML旨在检测数据模式(集群),而无需事先描述可能的结果。因此,在尝试根据功能(如感兴趣主题和人口统计数据)解决用户细分等问题时,可以探索无监督ML。相比之下,监督的ML会用事先定义的结果回答具体的研究问题,例如,某一帖子是否描述了某个以前定义的兴趣领域。

ML模型在各种应用中很有用,但也受到重要限制。首先,ML算法的结构是不透明的,即单个变量之间的联系难以确定。这使得ML方法的操作难以解释和可能导致的混淆难以检测。其次,在典型ML算法中,揭示的关系是相关关系,而不是因果关系。这进一步限制了他们的解释和可靠性。对无监督ML模型的解释更加困难,因为基础算法可以适当地识别模式,但无法解释其重要性。

启发式方法是受自然优化过程启发的试错方法,如"优胜劣汰"。与ML相比,启发式应用容易,需要的数据更少。虽然通过启发式方法比通过ML获得的结果更不准确,但这些方法在某些应用中可能足够。

与 ML 方法不同,特定指标法不能做出"智能"决策,而只能提供供人类解释的数据。例如,机会算法指标可用于在满意度和重要性方面优先考虑未满足的需求。

评估

分析后,必须评估获得的结果,例如根据黄金标准进行测试。然而,在实践中,很少有可用的黄金标准,并且必须咨询具有深厚领域知识的专家进行结果评估。为了促进这一评估,必须以可理解和熟悉的方式可视化结果。

SMM使用案例

本节描述了典型的SMM使用案例,这些案例捕捉患者体验,从而支持以患者为中心的创新过程(图3)。

图3 患者提供的疾病轨迹信息。这些信息通常不提供给制药公司。社交媒体挖掘(SMM) 技术可用于利用这一外部知识,获得的见解可用于多个研发活动。

使用案例 1:识别并确定患者 UMN 的优先级

由于患者和临床医生对疾病和 UMN 的看法可能不同,因此在药物开发过程中,可能会对与疾病相关的因素及其相关性做出有缺陷的假设。例如,一项有关类风湿性关节炎治疗的研究报告说,患者希望减轻疼痛和/或肿胀,而大多数医生将成功的治疗定义为实现对疾病进展的最大控制。在最坏的情况下,患者的需求可能被忽视,改善生活质量的创新机会可能会错过。

Cook等人利用社交媒体进行患者偏好研究,作为干眼症(DED)和非酒精性脂肪性肝药物开发初始阶段的一部分。商业软件程序用于自动数据提取,而随后的分析则手动执行。DED 患者的 UMN 可分为4类:与疾病、症状和诊断、治疗和生活质量相关的药物。此外,这些作者报告说,大多数患者主要关心的是显著效果的减少(没有症状),而不是治疗潜在的疾病。

技术进步不仅促进了数据提取的自动化,也促进了后续分析的自动化:例如,先前的几项研究,采用了无监督的ML技术,来探索被诊断患有自闭症、癌症、乳腺癌、COVID-19、饮食失调、心理健康和勃起功能障碍的患者的观点。在此上下文中,主题模型通常用于通过识别准确表示这些主题的单词来描述文本中的潜在主题。其中一种方法是LDA(Latent Dirichlet Allocation),它使用概率模型在给定语料库中推断每个文档中的主题。

Tapi Nzali等人使用主题建模来识别乳腺癌患者在 Facebook 和在线乳腺癌论坛上讨论的主题。将这些主题与临床试验期间使用的标准化自我管理问卷的数据进行了比较。在自我管理问卷中考虑的23个主题中,有22个与患者社交媒体讨论中发现的主题相匹配。

总的来说,主题模型是探索性的,因为它们的技术方法。它们揭示了潜在的主题,临床医生不了解,但与患者的日常生活高度相关。然而,主题模型的一个缺点是,对摘录主题的解释取决于主观专家判断,主观判断具有强烈的偏见倾向。由于 LDA 忽略了单词顺序,因此无法获得有关单词之间语义关系的上下文信息。这反过来又阻碍了更深层含义的解释和歧义的解决。LDA 的另一个局限性是假设主题本质上是独立的,因此,不能以元或子主题形式评估主题或层次结构之间的相关性。此外,主题模型中的细节水平和这些模型的重点高度依赖于数据处理前战略。Tapi Nzali等人通过减少需考虑的单词数量来提高主题模型的重点,例如,通过将模型限制为属于疾病特定词典的单词。这意味着此类词典由域专家手动策划。

一旦确定了具体的UMN,就可以得出病人的偏好。机会算法(opportunity algorithm)的理论基础是基于Ulwick的结果驱动的创新(ODI)概念,可以应用于此目的。ODI 的假设是,当新产品满足重要但相对未得到满足的需求时,就会发生成功的创新。因此,机会算法在"重要性"(通过主题建模发现)和"满意度"(源自情绪分析)的基础上,对产品机会(通过主题建模确定)进行排序。

使用案例 2:目标人群特征

为了提高创新过程的成功概率,必须根据表型对新药的目标人群进行表征,以招募最有可能在临床试验中表现出获益的患者。最近,社交媒体挖掘已成为研究人类行为和识别语义、结构或人口特征所指定的疾病人群症状的一种有希望的方法。这种描述患病人群的方法称为"数字表型"。这种方法的基本假设是,社交媒体用户的行为受其遗传和环境影响。数字表型允许对传统的表型下结论,而传统表型也由基因和环境决定。此外,数字表型可以作为观察信息的来源,提供对不同健康状况个体的见解。

Schafer等人使用聚合分层聚类(一种无监督的 ML 算法)来识别专门健康论坛中讨论胃肠道 (GI) 不适的用户。分层聚类分析是一种基于距离的方法,用于识别输入数据中的异质模式(群集)。来自不同集群的对象相距很远,这意味着特征相似度较低。在"聚合"分层聚类过程中,每个对象形成一个聚类。随后,所有对象合并以形成大簇。在Schafer等人提出的方法中,主题模型、疾病症状和用户人口统计学以及文本长度等结构特征被认为对用户细分有用。

如前所述,基于ML的方法的主要局限性涉及对结果的解释容易受到不同偏见的影响。此外,只能假定调查结果的因果关系,不能解释。总体而言,文献表明,基于距离的聚类可用于在提供适当数据时描述子聚合的特征。业内专家的评价对于降低有偏见的解释风险至关重要。

使用案例 3:药物重定向

重定向是一种潜在的药物开发战略,可用于开发现有药物疗法的新应用。与开发新药相比,重新调整用途具有成本效益。例如,最初开发用于治疗抑郁症的bupropion(井布丁),但最终发现它对戒烟有用(为此它被推销为Zyban)。另一种类型的药物改用涉及处方药的超说明书用药(off-label drug use),以治疗其授权条件以外的条件。SMM 可以帮助识别日常实践中未知(说明书外)的药物使用模式,从而为后续药物重定向生成新的假设。

Ru等人在训练受监督的 ML 算法 (图2)时考虑了患者情绪、疾病症状和药物适应症,该算法能够以 AUC 分数 0.93 成功预测偶然药物的使用。新应用包括用于肥胖和减肥的二甲双酚和胸腺素,用于抑郁症的曲马多,以及用于腹泻肠易激综合征的安丹塞特龙。由于基于ML方法的局限性,当算法预测药物的超说明书使用时,无法自动得出与临床相关的推论。相反,结果可用于测试后续假设。

使用案例4:患者招募

患者招募对于临床试验的成功至关重要。其目标是招募一个代表目标人群的病人群体。应包括与目标组相同的表型患者,以证明尽可能高的治疗价值。

社交媒体平台正越来越多地用于招募有特定健康状况的患者。

Merchant等人用功能转换的主题模型生成语义功能。这些功能随后被用于受监督的 ML 算法,以识别被诊断患有不同疾病的 Facebook 用户。例如,糖尿病患者的 AUC 评分为 0.73。同样,Sarker等人使用支持向量机 (SVM) - 一种受监督的 ML 算法 - 在 Twitter 上识别孕妇群体。他们的分类算法考虑了语义特征,如主题模型和情绪值,以及结构特征,如文本长度 (图2)。在这项研究中,孕妇的准确度为0.84。

先前的研究表明,SMM可用于支持社交媒体患者招募临床试验。为此,使用案例 3 中衍生的数字表型特征可用于培训受监督的 ML 算法,该算法可以根据用户数据识别反映目标组数字表型的用户。在确定相关群体后,需要进行资格审查。因此,可以使用基于规则的算法来包括或排除符合不同标准的用户。

然而,SMM 不能用于评估需要特定医疗状况(如患者生命体征)信息的资格标准,因为此类信息通常不可用。因此,其他数据源(如患者记录)必须由业内专家使用传统方法进行评估,以进行最终资格评估。

使用案例 5:用于早期发现不良事件的补充数据源

药品不良事件的发生对制药业具有深远的资金影响。当新药上市时,这种风险尤其高。传统的不良事件报告机制包括正式报告系统,将信息输入在线数据库。其中包括FDA不良事件报告系统(FAERS)。

一些研究已经研究了使用SMM预测药物不良事件(ADE)信号的可能性。Abbasi等人开发了一个SMM管道(图2),将与健康相关的在线论坛数据与从Twitter和谷歌获得的搜索结果相结合,从而创建一个预测系统,有可能比既定的报告系统更早地识别ADE。Abbasi等人使用基于规则的标签工具将药物和品牌与特定的 ADEs 关联在一起,例如用户提及的具体事件。使用受监督的学习算法来检查用户情绪。此算法学习了与不同功能(如产品和经验丰富的事件)相关的时间系列特定权重,以创建不同的 ADE 信号。

平均而言,Abbasi等人提出的方针在及时的 ADE 预测中优于常用数据库。例如,在FDA宣布之前22个月,建议的模型能够准确预测与Revatio药物有关的不良事件。在测试期间,该算法产生了4个真阳性和2个假阳性警告。

使用Abbasi等人开发的算法获得的信号可用于生成早期发现药物安全问题的假设。一般来说,信号检测可以使用数据融合方法进行增强。此外,传统药理学数据源和社交媒体数据的组合可能提供一个很有希望的解决方案。

结论和展望

本文回顾了SMM的使用,以促进以患者为中心的药物开发。本文使用几个例子来描述SMM如何为研究人员提供适当方法来评估患者的社交媒体数据。这反过来又有助于根据以患者为中心的数字表型确定以患者为中心的创新机会以及目标人群群体。此外,SMM可用于获取信息,这些信息用于形成有关药物再利用和上市后监管的假设。尽管本文中提到并使用了这些案例,但专业人员对在药物开发过程中使用社交媒体数据的重要性没有达成共识。因此,必须进行进一步调查,以确定这些数据的价值。

与在药物开发中使用SMM相关的主要限制出现在数据质量的各个维度上。某些数据可用性也有限。例如,涉及高水平患者痛苦的慢性疾病更易接受基于SMM的分析,而仅引起轻微痛苦的急性疾病在社交媒体平台上不常被提及。此外,数据准确性受年龄分布和患者获得技术的限制。很明显,不能通过 SMM 来研究不活跃在社交媒体上的患者群体。同样,由于互联网接入有限和/或识字率低,发展中国家的人口获得社交媒体平台的机会有限,因此很难进行调查和分析。与疾病相关的残疾,如视觉障碍,也可能抑制患者的社交媒体利用。此外,数据准确性受到社交媒体数据真实性的限制。患者通常不是专业医疗人员,因此他们通常用自己的术语描述自己的健康状况,与医学界使用的术语有显著差异。缺乏医疗培训也可能导致患者表达虚假联想。例如,有些患者经常在区分共同病症和不良事件方面遇到困难。

数据质量差可能导致高抽样偏差,从而降低结果的有效性,从而暗示结果不代表目标人群。事实上,即使现有的社交媒体要代表目标人群,也必须考虑到这些数据可能不完整和/或不一致。此外,SMM 模型固有的误差率限制了相应的结果有效性。使用SMM技术可能受到法律和/或道德限制。例如,应始终遵守数据隐私法和平台政策的要求。从道德角度来看,问题可能产生,因为公共和私人空间的一般意识水平不同,确保用户匿名存在困难。

包括SMM管道的不同步骤要求作出若干关键决定,并作出广泛调整,以适应具体的使用情况。首先,必须通过比较每个平台的商业和非商业产品的不同优缺点来选择适当的社交媒体平台。每个平台的具体特点和数据质量是这方面最重要的因素。其次,适当的数据预处理是成功数据分析的基础,数据质量差总是导致结果不佳。鉴于社交媒体平台上可用大量文本数据,NLP 技术的应用是有效数据结构的关键。在在线对话中使用非正式表达(例如,使用不精确的医学术语、俚语以及拼写和语法错误)对社交媒体数据的准确预处理提出了重大挑战。随后,在执行分析时,适当选择算法是关键。根据分析,评价往往因缺乏黄金标准而受损,因此相关学科之间的合作对于促进对结果的准确评价至关重要。

总体而言,SMM 有助于使制药公司的药物开发流程与患者需求保持一致,并有助于使这些开发流程能够响应不断变化的商业环境。随着社交媒体数据和共享疾病轨迹相关信息的患者数量的增加,基于 SMM 的研究工作预计将在未来增加,并将成为以患者为中心的药物开发的关键推动方式

参考资料

Jonathan Koss, Astrid Rheinlaender, Hubert Truebel, Sabine Bohnet-Joschko,

Social media mining in drug development—Fundamentals and use cases, Drug Discovery Today, 2021, ISSN 1359-6446, https://doi.org/10.1016/j.drudis.2021.08.012.

----------- End -----------

现在关注【LIKE.TG出海指南频道】【LIKE.TG生态链-全球资源互联社区】,即可免费领取【WhatsApp、LINE、Telegram、Twitter、ZALO云控】等获客工具试用、【住宅IP、号段筛选】等免费资源,机会难得,快来解锁更多资源,助力您的业务飞速成长!点击【联系客服】

本文由LIKE.TG编辑部转载自互联网并编辑,如有侵权影响,请联系官方客服,将为您妥善处理。

This article is republished from public internet and edited by the LIKE.TG editorial department. If there is any infringement, please contact our official customer service for proper handling.


科技论坛互联网论坛虚拟币论坛技术论坛科技峰会互联网峰会虚拟币峰会技术峰会社交媒体论坛世界互联网Server deployment数据论坛数据峰会网络论坛网络峰会战略论坛开放论坛全球论坛全球峰会发展论坛人工智能论坛程序员论坛
加入like.tg生态圈,即可获利、结识全球供应商、拥抱全球软件生态圈加入like.tg生态圈,即可获利、结识全球供应商、拥抱全球软件生态圈加入like.tg生态圈,即可获利、结识全球供应商、拥抱全球软件生态圈
全球峰会
Flarum搭建论坛详细教程
Flarum搭建论坛详细教程
1、关于Flarum程序完美支持军哥lnmp环境/宝塔等,下载程序上传到网站根目录并需要伪静态+fileinfo扩展。程序本地下载:FlarumChina-beta7.zipGithub下载地址:https://github.com/skywalker512/FlarumChinafileinfo拓展 需要支持php扩展fileinfo。 1、对于lnmp1.3默认没有支持。修改include/upgrade_php.sh这个文件,把其中的:--disable-fileinfo,全部替换:--enable-fileinfo,再执行./upgrade.sh升级php就行了。 2、对于宝塔,安装后,找到你的PHP程序,里面有扩展可以选择安装。2、centos安装LNMP支持flarun2 | 1 数据库安装代码语言:javascript复制sudo wget https://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm yum -y install mysql57-community-release-el7-10.noarch.rpm yum -y install mysql-community-server systemctl start mysqld.service2 | 2 mysql5.7获取密码的方式代码语言:javascript复制sudo grep 'temporary password' /var/log/mysqld.log代码语言:javascript复制vi /etc/my.cnf代码语言:javascript复制#添加validate_password_policy配置 validate_password_policy=0 #关闭密码策略 validate_password = off修改root密码代码语言:javascript复制mysql -uroot -p密码代码语言:javascript复制set global validate_password_policy=0; set global validate_password_length=1; ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass4!'; grant all privileges on *.* to root@"%" identified by "new password"; flush privileges;代码语言:javascript复制systemctl restart mysql2 | 3 安装php7.2代码语言:javascript复制sudo rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm sudo rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm yum install php72w-fpm php72w-cli php72w-curl php72w-dom php72w-gd php72w-json php72w-mbstring php72w-openssl php72w-pdo_mysql php72w-tokenizer php72w-zip -y代码语言:javascript复制vim /etc/php-fpm.d/www.conf代码语言:javascript复制#找到以下两处共四行代码并修改如下: user = nginx group = nginx listen.owner = nginx listen.group = nginx3、安装Flarum方法一:下载=即使用整合包https://github.com/skywalker512/FlarumChina/releases/tag/v0.1.0-beta.12方法二:composer拉取 (比较建议后面装插件都是用的composer)3 | 1 安装composer下载composer.phar, 如果是网络原因失败,多试几次代码语言:javascript复制curl -sS https://getcomposer.org/installer | php把composer.phar移动到环境下让其变成可执行:代码语言:javascript复制mv composer.phar /usr/local/bin/composer测试代码语言:javascript复制composer -v修改镜像地址代码语言:javascript复制composer config repo.packagist composer https://mirrors.aliyun.com/composer/3 | 2 安装ningx代码语言:javascript复制yum -y install nginx unzip进入wwwroot目录中使用composer命令来安装flarum:代码语言:javascript复制mkdir /var/www/flarum/ cd /var/www/flarum/代码语言:javascript复制composer create-project flarum/flarum . --stability=beta #不用使用管理员权限命令sudo。完毕后修改nginx中的默认配置文件:代码语言:javascript复制sudo vim /etc/nginx/nginx.conf代码语言:javascript复制#将server代码段下的所有代码都用#注释掉 #server { # listen 80 default_server; # listen [::]:80 default_server; # server_name _; # root /usr/share/nginx/html; # # Load configuration files for the default server block. # include /etc/nginx/default.d/*.conf; # location / { # } # error_page 404 /404.html; # location = /40x.html { # } # error_page 500 502 503 504 /50x.html; # location = /50x.html { # } #} #然后修改 server { listen 80; server_name your.website.url; root /var/www/flarum/public; index index.php index.html; #include /home/flarum/wwwroot/.nginx.conf; location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } location / { try_files $uri $uri/ /index.php?$query_string; } # The following directives are based on best practices from H5BP Nginx Server Configs # https://github.com/h5bp/server-configs-nginx # Expire rules for static content location ~* \.(?:manifest|appcache|html?|xml|json)$ { add_header Cache-Control "max-age=0"; } location ~* \.(?:rss|atom)$ { add_header Cache-Control "max-age=3600"; } location ~* \.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|mp4|ogg|ogv|webm|htc)$ { add_header Cache-Control "max-age=2592000"; access_log off; } location ~* \.(?:css|js)$ { add_header Cache-Control "max-age=31536000"; access_log off; } location ~* \.(?:ttf|ttc|otf|eot|woff|woff2)$ { add_header Cache-Control "max-age=2592000"; access_log off; } # Gzip compression gzip on; gzip_comp_level 5; gzip_min_length 256; gzip_proxied any; gzip_vary on; gzip_types application/atom+xml application/javascript application/json application/ld+json application/manifest+json application/rss+xml application/vnd.geo+json application/vnd.ms-fontobject application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/bmp image/svg+xml image/x-icon text/cache-manifest text/css text/plain text/vcard text/vnd.rim.location.xloc text/vtt text/x-component text/x-cross-domain-policy; }注意:因为Flarum遵守了最新的安全规范,其程序的运行目录其实是在public文件夹内。4、插件安装https://bbs.csur.fun/d/84-flarum5、虚拟机搭建买个虚拟机做网页,诸多限制,虚拟机服务商的提供的服务确实就两字“操蛋”。 为什么没有买云服务器?就两字 “没钱”!哈哈。 虚拟机的购买途径自寻,但是很多服务商真的很坑爹。 虚拟机要求php支持7.2以上mysql支持5.7以上能够支持更改网站跟目录6、更改网站根目录层级将 public 目录(包括 .htaccess)中的所有文件移动到 Flarum 根目录。然后编辑 .htaccess 取消第 9-14 行的注释,以保护敏感资源。 然后编辑 index.php 文件,更改以下行:代码语言:javascript复制$site = require './site.php';最后,在 site.php 更新路径,以反映新的目录结构:代码语言:javascript复制'base' => __DIR__, 'public' => __DIR__, 'storage' => __DIR__.'/storage',config.php 更新 url 路径代码语言:javascript复制'url' => 'https://xxx.com/community',不更改网站层级目录请根据你的虚拟主机面板的不同,将网站运行目录指向public文件夹。 如果您使用的是虚拟主机无法更改目录,请按照一下的方法进行设置 在根目录下新建一个名为 .htaccess的文件代码语言:javascript复制RewriteEngine on RewriteCond %{REQUEST_URI} !^/public/ RewriteRule ^(.*)$ /public/$1 [L]7、其他底部加统计代码语言:javascript复制vendor/flarum/core/views/app.blade.php去掉网络字体代码语言:javascript复制vendor/flarum/core/src/Http/WebApp/WebAppView.php伪静态设置Nginx的话在站点配置文件处添加下面一段话。代码语言:javascript复制location / { try_files $uri $uri/ /index.php?$query_string; } location /api { try_files $uri $uri/ /api.php?$query_string; } location /admin { try_files $uri $uri/ /admin.php?$query_string; } location /flarum { deny all; return 404; } location ~ .php$ { fastcgi_split_path_info ^(.+.php)(/.+)$; fastcgi_pass unix:/tmp/php-cgi.sock; fastcgi_index index.php; include fastcgi.conf; }
一些关于网站推广问题合集。
一些关于网站推广问题合集。
网站怎么快速上权重?要让一个网站快速提高权重,需要实施以下一些有效的策略:提供高质量的内容:提供高质量、原创、有用的内容是最重要的。这可以吸引更多的用户访问,并增加用户留存时间,提高用户体验。同时,高质量的内容也会被其他网站引用和分享,这将有助于增加外部链接,提高网站的权重。内部链接优化:内部链接是指在网站内部不同页面之间的链接。通过优化内部链接结构,可以增加搜索引擎对网站的理解,提高网站权重。在内部链接时,要使用相关的关键字作为链接文本,而不是使用"点击这里"这样无意义的链接文本。外部链接建设:获取来自其他网站的高质量链接对于提高网站权重非常重要。可以通过主动进行友情链接、媒体报道、论坛发帖等方式增加外部链接。但是请注意,建立外部链接是需要花费时间和精力的,必须确保链接是高质量的、自然的,否则可能会适得其反。社交媒体推广:在社交媒体平台上建立专业的社交媒体账号,提供网站相关的信息、文章、图像、视频等,让更多的用户了解网站,增加网站的曝光度,进而增加网站权重。网站结构优化:优化网站结构可以帮助搜索引擎更好地抓取和理解网站内容,提高网站权重。可以通过优化网站的HTML代码结构、网站的目录结构、网站的图片和视频的优化等方式实现。需要注意的是,这些策略需要长期坚持和不断完善,才能够取得长期、稳定的效果。怎么养站?要养好一个网站,需要考虑以下几个方面:网站内容:一个网站需要有高质量、有价值的内容来吸引用户。内容可以是文字、图片、视频等形式,需要有足够的量和质量,同时需要及时更新。网站设计:网站的设计需要符合用户的视觉需求,界面简洁、易于操作、美观大方,同时需要考虑不同设备(如手机、平板、电脑)的适配。网站优化:通过搜索引擎优化(SEO)、网站性能优化(如减少页面加载时间)、提高用户体验(如减少广告干扰),来提高网站的流量和用户满意度。社交媒体:通过社交媒体来吸引用户,增加网站的曝光率和影响力,比如可以在微信公众号、微博、知乎等平台上发布内容,吸引用户关注。安全保护:确保网站的安全性,包括用户信息保护、反垃圾邮件、反病毒等安全措施。数据分析:通过数据分析工具,了解用户访问情况,优化网站的运营,提高用户满意度和转化率。综合考虑上述因素,不断更新和改进,就可以养好一个网站。网站怎么发外链有用?要使外链对你的网站有用,你需要遵循以下几个步骤:确定目标受众和内容:确定你要向哪些人推广内容,以及他们可能对哪些内容感兴趣。通过创建高质量的内容,吸引用户来阅读你的文章并点击你的链接。找到相关的网站:寻找与你的内容相关的网站,并联系网站所有者以获得一个外链。你可以通过搜索引擎、社交媒体、行业博客等方式来找到这些网站。站长百科网创建有价值的内容:创建有价值的内容可以吸引其他网站链接到你的网站。确保你的内容是高质量的,包含有用的信息,且易于阅读和分享。联系其他网站:直接联系其他网站的所有者,请求他们在他们的网站上添加你的链接。你可以通过电子邮件、社交媒体或其他渠道来联系他们。使用社交媒体:在社交媒体上分享你的内容,并鼓励其他用户分享你的文章。这样可以提高你的内容的曝光率,并吸引更多的用户来访问你的网站。需要注意的是,对于外链的数量和质量,搜索引擎有一定的要求,如果采用不当的方式获取外链,可能会对你的网站产生负面影响。因此,你需要遵守搜索引擎的规则,采用合法的方式获取外链,从而为你的网站带来更多的流量和排名提升。2023年建什么类型的网站有前景?2023年,移动端和云端应用程序将继续受到极大的关注,尤其是基于AI的应用程序。有预测认为,2023年将会出现大量的智能家居、自动驾驶、语音助手等应用,这些网站将具有更大的前景。收藏 | 0点赞 | 0打赏
红鲱鱼发布欧洲100佳创业企业名单
红鲱鱼发布欧洲100佳创业企业名单
红鲱鱼欧洲100佳创业企业评选活动上周在阿姆斯特丹结束,这次活动评出了欧洲100家最具潜力的创业企业。此次论坛讨论了2016年及未来几年欧洲创业者面临的前景。众多顶级投资人参与了讨论,指导创业企业如何吸引合适的投资机构。演讲嘉宾和听众都认为在欧洲融资仍然是主要挑战,这对于创业者来说尤其重要。论坛讨论结束,企业开始登台宣讲,评选标准和去年一样严格。参与评选的企业来自整个欧洲,从俄罗斯到法国到英国到德国。这100家最佳企业都是经过严格的层层筛选评出的,荣誉来之不易,也是众望所归。这些企业来自不同的领域,他们在欧洲以及全球市场的发展将备受瞩目,也会受到密切跟踪。 2016年欧洲100佳创业企业榜单公司行业国家12Return软件荷兰3megawatt GmbH清洁技术德国4th Office云技术英国6Tribes社交媒体英国Acast AB娱乐媒体瑞典Accellta Ltd生命科学/生物技术以色列Agiboo BV云技术荷兰agile42其他德国Anders Innovations网络/互联网芬兰Appentra Solutions软件西班牙arivis AG软件德国Beyond Sports虚拟技术荷兰Billage云技术西班牙Biovotion AG医疗设备瑞士BISEES INFORMATION SYSTEMS软件爱尔兰CARENITY社交媒体法国CloudEndure云技术以色列Compliance Risks专业服务爱尔兰Create Intelligence Ltd软件/分析英国Cree GmbH清洁技术奥地利CropX云技术以色列DCA (Data-Centric Alliance)大数据/存储俄罗斯Diviac AG互联网/网络瑞士EasyPark Group其他瑞典Educated Change Ltd娱乐媒体英国Enso Detego GmbH软件奥地利eSMART Technologies清洁技术瑞士EVRYTHNG云技术英国Fairsail云技术英国Featurespace其他英国FINALCAD软件法国GetIntent广告技术美国Grapeshot软件英国GuardSquare网络安全比利时HeadSense Medical医疗设备以色列HELLO STAGE娱乐媒体美国Herta Security网络安全西班牙High-Tech Bridge网络安全瑞士homePad Solutions互联网/网络瑞士ICS2大数据/存储以色列ID Finance银行/并购西班牙indoo.rs GmbH软件奥地利Kameleoon广告技术法国Keypasco网络安全瑞典KTH Event Agency清洁技术土耳其Lemon Way互联网/网络法国Leverate软件以色列LibraEsva Srl网络安全意大利MediSapiens Ltd生命科学/生物技术芬兰MeetApp AB移动技术瑞典Metafused Ltd广告技术英国moblin大数据/软件/广告技术以色列Mols Media BV软件荷兰MYMobile Security网络安全英国nestpick其他德国Nexthink软件瑞士OneSoon Limited软件英国Openhost, SL云技术西班牙Optimal Plus大数据/存储以色列OurCrowd风险资本/投资以色列Overleaf云技术英国P.I.Works电讯土耳其Padawan Ltd网络英国Parx Plastics BV清洁技术荷兰PleaseTech Ltd软件英国Polar OLED Ltd硬件英国Privatequity.biz互联网/网络以色列Productsup GmbH软件德国Pyreos Limited硬件英国Qosmos软件法国QUASARDB软件法国Radisens Diagnostics医疗设备爱尔兰rational motion清洁技术德国RedCloud Technologies软件英国Relay42云技术荷兰Roima Intelligence其他芬兰Securosys SA网络安全瑞士Sentiance软件比利时Shadow Technologies网络/互联网以色列Smoltek AB纳米技术瑞典Spideo软件法国Sportswik AB娱乐媒体dia瑞典Stratoscale虚拟技术以色列Takeaway.com B.V.网络/互联网荷兰Teamnet Group软件罗马尼亚The Nostrum Group Ltd软件英国TimeLog A/S软件丹麦Tinitell电讯瑞典TitanHQ网络安全爱尔兰Umbilical Design其他瑞典VATBOX云技术英国Venture Spirit云技术比利时VerseOne软件英国Visma Solutions Oy云技术芬兰Wax Digital Ltd云技术英国网络lib大数据/存储法国WeekCal BV移动技术荷兰Zapgocharger Ltd消费电子英国Zebra Medical Vision生命科学/生物技术以色列ZeroLight软件英国
科技论坛
Flarum搭建论坛详细教程
Flarum搭建论坛详细教程
1、关于Flarum程序完美支持军哥lnmp环境/宝塔等,下载程序上传到网站根目录并需要伪静态+fileinfo扩展。程序本地下载:FlarumChina-beta7.zipGithub下载地址:https://github.com/skywalker512/FlarumChinafileinfo拓展 需要支持php扩展fileinfo。 1、对于lnmp1.3默认没有支持。修改include/upgrade_php.sh这个文件,把其中的:--disable-fileinfo,全部替换:--enable-fileinfo,再执行./upgrade.sh升级php就行了。 2、对于宝塔,安装后,找到你的PHP程序,里面有扩展可以选择安装。2、centos安装LNMP支持flarun2 | 1 数据库安装代码语言:javascript复制sudo wget https://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm yum -y install mysql57-community-release-el7-10.noarch.rpm yum -y install mysql-community-server systemctl start mysqld.service2 | 2 mysql5.7获取密码的方式代码语言:javascript复制sudo grep 'temporary password' /var/log/mysqld.log代码语言:javascript复制vi /etc/my.cnf代码语言:javascript复制#添加validate_password_policy配置 validate_password_policy=0 #关闭密码策略 validate_password = off修改root密码代码语言:javascript复制mysql -uroot -p密码代码语言:javascript复制set global validate_password_policy=0; set global validate_password_length=1; ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass4!'; grant all privileges on *.* to root@"%" identified by "new password"; flush privileges;代码语言:javascript复制systemctl restart mysql2 | 3 安装php7.2代码语言:javascript复制sudo rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm sudo rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm yum install php72w-fpm php72w-cli php72w-curl php72w-dom php72w-gd php72w-json php72w-mbstring php72w-openssl php72w-pdo_mysql php72w-tokenizer php72w-zip -y代码语言:javascript复制vim /etc/php-fpm.d/www.conf代码语言:javascript复制#找到以下两处共四行代码并修改如下: user = nginx group = nginx listen.owner = nginx listen.group = nginx3、安装Flarum方法一:下载=即使用整合包https://github.com/skywalker512/FlarumChina/releases/tag/v0.1.0-beta.12方法二:composer拉取 (比较建议后面装插件都是用的composer)3 | 1 安装composer下载composer.phar, 如果是网络原因失败,多试几次代码语言:javascript复制curl -sS https://getcomposer.org/installer | php把composer.phar移动到环境下让其变成可执行:代码语言:javascript复制mv composer.phar /usr/local/bin/composer测试代码语言:javascript复制composer -v修改镜像地址代码语言:javascript复制composer config repo.packagist composer https://mirrors.aliyun.com/composer/3 | 2 安装ningx代码语言:javascript复制yum -y install nginx unzip进入wwwroot目录中使用composer命令来安装flarum:代码语言:javascript复制mkdir /var/www/flarum/ cd /var/www/flarum/代码语言:javascript复制composer create-project flarum/flarum . --stability=beta #不用使用管理员权限命令sudo。完毕后修改nginx中的默认配置文件:代码语言:javascript复制sudo vim /etc/nginx/nginx.conf代码语言:javascript复制#将server代码段下的所有代码都用#注释掉 #server { # listen 80 default_server; # listen [::]:80 default_server; # server_name _; # root /usr/share/nginx/html; # # Load configuration files for the default server block. # include /etc/nginx/default.d/*.conf; # location / { # } # error_page 404 /404.html; # location = /40x.html { # } # error_page 500 502 503 504 /50x.html; # location = /50x.html { # } #} #然后修改 server { listen 80; server_name your.website.url; root /var/www/flarum/public; index index.php index.html; #include /home/flarum/wwwroot/.nginx.conf; location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } location / { try_files $uri $uri/ /index.php?$query_string; } # The following directives are based on best practices from H5BP Nginx Server Configs # https://github.com/h5bp/server-configs-nginx # Expire rules for static content location ~* \.(?:manifest|appcache|html?|xml|json)$ { add_header Cache-Control "max-age=0"; } location ~* \.(?:rss|atom)$ { add_header Cache-Control "max-age=3600"; } location ~* \.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|mp4|ogg|ogv|webm|htc)$ { add_header Cache-Control "max-age=2592000"; access_log off; } location ~* \.(?:css|js)$ { add_header Cache-Control "max-age=31536000"; access_log off; } location ~* \.(?:ttf|ttc|otf|eot|woff|woff2)$ { add_header Cache-Control "max-age=2592000"; access_log off; } # Gzip compression gzip on; gzip_comp_level 5; gzip_min_length 256; gzip_proxied any; gzip_vary on; gzip_types application/atom+xml application/javascript application/json application/ld+json application/manifest+json application/rss+xml application/vnd.geo+json application/vnd.ms-fontobject application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/bmp image/svg+xml image/x-icon text/cache-manifest text/css text/plain text/vcard text/vnd.rim.location.xloc text/vtt text/x-component text/x-cross-domain-policy; }注意:因为Flarum遵守了最新的安全规范,其程序的运行目录其实是在public文件夹内。4、插件安装https://bbs.csur.fun/d/84-flarum5、虚拟机搭建买个虚拟机做网页,诸多限制,虚拟机服务商的提供的服务确实就两字“操蛋”。 为什么没有买云服务器?就两字 “没钱”!哈哈。 虚拟机的购买途径自寻,但是很多服务商真的很坑爹。 虚拟机要求php支持7.2以上mysql支持5.7以上能够支持更改网站跟目录6、更改网站根目录层级将 public 目录(包括 .htaccess)中的所有文件移动到 Flarum 根目录。然后编辑 .htaccess 取消第 9-14 行的注释,以保护敏感资源。 然后编辑 index.php 文件,更改以下行:代码语言:javascript复制$site = require './site.php';最后,在 site.php 更新路径,以反映新的目录结构:代码语言:javascript复制'base' => __DIR__, 'public' => __DIR__, 'storage' => __DIR__.'/storage',config.php 更新 url 路径代码语言:javascript复制'url' => 'https://xxx.com/community',不更改网站层级目录请根据你的虚拟主机面板的不同,将网站运行目录指向public文件夹。 如果您使用的是虚拟主机无法更改目录,请按照一下的方法进行设置 在根目录下新建一个名为 .htaccess的文件代码语言:javascript复制RewriteEngine on RewriteCond %{REQUEST_URI} !^/public/ RewriteRule ^(.*)$ /public/$1 [L]7、其他底部加统计代码语言:javascript复制vendor/flarum/core/views/app.blade.php去掉网络字体代码语言:javascript复制vendor/flarum/core/src/Http/WebApp/WebAppView.php伪静态设置Nginx的话在站点配置文件处添加下面一段话。代码语言:javascript复制location / { try_files $uri $uri/ /index.php?$query_string; } location /api { try_files $uri $uri/ /api.php?$query_string; } location /admin { try_files $uri $uri/ /admin.php?$query_string; } location /flarum { deny all; return 404; } location ~ .php$ { fastcgi_split_path_info ^(.+.php)(/.+)$; fastcgi_pass unix:/tmp/php-cgi.sock; fastcgi_index index.php; include fastcgi.conf; }
一些关于网站推广问题合集。
一些关于网站推广问题合集。
网站怎么快速上权重?要让一个网站快速提高权重,需要实施以下一些有效的策略:提供高质量的内容:提供高质量、原创、有用的内容是最重要的。这可以吸引更多的用户访问,并增加用户留存时间,提高用户体验。同时,高质量的内容也会被其他网站引用和分享,这将有助于增加外部链接,提高网站的权重。内部链接优化:内部链接是指在网站内部不同页面之间的链接。通过优化内部链接结构,可以增加搜索引擎对网站的理解,提高网站权重。在内部链接时,要使用相关的关键字作为链接文本,而不是使用"点击这里"这样无意义的链接文本。外部链接建设:获取来自其他网站的高质量链接对于提高网站权重非常重要。可以通过主动进行友情链接、媒体报道、论坛发帖等方式增加外部链接。但是请注意,建立外部链接是需要花费时间和精力的,必须确保链接是高质量的、自然的,否则可能会适得其反。社交媒体推广:在社交媒体平台上建立专业的社交媒体账号,提供网站相关的信息、文章、图像、视频等,让更多的用户了解网站,增加网站的曝光度,进而增加网站权重。网站结构优化:优化网站结构可以帮助搜索引擎更好地抓取和理解网站内容,提高网站权重。可以通过优化网站的HTML代码结构、网站的目录结构、网站的图片和视频的优化等方式实现。需要注意的是,这些策略需要长期坚持和不断完善,才能够取得长期、稳定的效果。怎么养站?要养好一个网站,需要考虑以下几个方面:网站内容:一个网站需要有高质量、有价值的内容来吸引用户。内容可以是文字、图片、视频等形式,需要有足够的量和质量,同时需要及时更新。网站设计:网站的设计需要符合用户的视觉需求,界面简洁、易于操作、美观大方,同时需要考虑不同设备(如手机、平板、电脑)的适配。网站优化:通过搜索引擎优化(SEO)、网站性能优化(如减少页面加载时间)、提高用户体验(如减少广告干扰),来提高网站的流量和用户满意度。社交媒体:通过社交媒体来吸引用户,增加网站的曝光率和影响力,比如可以在微信公众号、微博、知乎等平台上发布内容,吸引用户关注。安全保护:确保网站的安全性,包括用户信息保护、反垃圾邮件、反病毒等安全措施。数据分析:通过数据分析工具,了解用户访问情况,优化网站的运营,提高用户满意度和转化率。综合考虑上述因素,不断更新和改进,就可以养好一个网站。网站怎么发外链有用?要使外链对你的网站有用,你需要遵循以下几个步骤:确定目标受众和内容:确定你要向哪些人推广内容,以及他们可能对哪些内容感兴趣。通过创建高质量的内容,吸引用户来阅读你的文章并点击你的链接。找到相关的网站:寻找与你的内容相关的网站,并联系网站所有者以获得一个外链。你可以通过搜索引擎、社交媒体、行业博客等方式来找到这些网站。站长百科网创建有价值的内容:创建有价值的内容可以吸引其他网站链接到你的网站。确保你的内容是高质量的,包含有用的信息,且易于阅读和分享。联系其他网站:直接联系其他网站的所有者,请求他们在他们的网站上添加你的链接。你可以通过电子邮件、社交媒体或其他渠道来联系他们。使用社交媒体:在社交媒体上分享你的内容,并鼓励其他用户分享你的文章。这样可以提高你的内容的曝光率,并吸引更多的用户来访问你的网站。需要注意的是,对于外链的数量和质量,搜索引擎有一定的要求,如果采用不当的方式获取外链,可能会对你的网站产生负面影响。因此,你需要遵守搜索引擎的规则,采用合法的方式获取外链,从而为你的网站带来更多的流量和排名提升。2023年建什么类型的网站有前景?2023年,移动端和云端应用程序将继续受到极大的关注,尤其是基于AI的应用程序。有预测认为,2023年将会出现大量的智能家居、自动驾驶、语音助手等应用,这些网站将具有更大的前景。收藏 | 0点赞 | 0打赏
红鲱鱼发布欧洲100佳创业企业名单
红鲱鱼发布欧洲100佳创业企业名单
红鲱鱼欧洲100佳创业企业评选活动上周在阿姆斯特丹结束,这次活动评出了欧洲100家最具潜力的创业企业。此次论坛讨论了2016年及未来几年欧洲创业者面临的前景。众多顶级投资人参与了讨论,指导创业企业如何吸引合适的投资机构。演讲嘉宾和听众都认为在欧洲融资仍然是主要挑战,这对于创业者来说尤其重要。论坛讨论结束,企业开始登台宣讲,评选标准和去年一样严格。参与评选的企业来自整个欧洲,从俄罗斯到法国到英国到德国。这100家最佳企业都是经过严格的层层筛选评出的,荣誉来之不易,也是众望所归。这些企业来自不同的领域,他们在欧洲以及全球市场的发展将备受瞩目,也会受到密切跟踪。 2016年欧洲100佳创业企业榜单公司行业国家12Return软件荷兰3megawatt GmbH清洁技术德国4th Office云技术英国6Tribes社交媒体英国Acast AB娱乐媒体瑞典Accellta Ltd生命科学/生物技术以色列Agiboo BV云技术荷兰agile42其他德国Anders Innovations网络/互联网芬兰Appentra Solutions软件西班牙arivis AG软件德国Beyond Sports虚拟技术荷兰Billage云技术西班牙Biovotion AG医疗设备瑞士BISEES INFORMATION SYSTEMS软件爱尔兰CARENITY社交媒体法国CloudEndure云技术以色列Compliance Risks专业服务爱尔兰Create Intelligence Ltd软件/分析英国Cree GmbH清洁技术奥地利CropX云技术以色列DCA (Data-Centric Alliance)大数据/存储俄罗斯Diviac AG互联网/网络瑞士EasyPark Group其他瑞典Educated Change Ltd娱乐媒体英国Enso Detego GmbH软件奥地利eSMART Technologies清洁技术瑞士EVRYTHNG云技术英国Fairsail云技术英国Featurespace其他英国FINALCAD软件法国GetIntent广告技术美国Grapeshot软件英国GuardSquare网络安全比利时HeadSense Medical医疗设备以色列HELLO STAGE娱乐媒体美国Herta Security网络安全西班牙High-Tech Bridge网络安全瑞士homePad Solutions互联网/网络瑞士ICS2大数据/存储以色列ID Finance银行/并购西班牙indoo.rs GmbH软件奥地利Kameleoon广告技术法国Keypasco网络安全瑞典KTH Event Agency清洁技术土耳其Lemon Way互联网/网络法国Leverate软件以色列LibraEsva Srl网络安全意大利MediSapiens Ltd生命科学/生物技术芬兰MeetApp AB移动技术瑞典Metafused Ltd广告技术英国moblin大数据/软件/广告技术以色列Mols Media BV软件荷兰MYMobile Security网络安全英国nestpick其他德国Nexthink软件瑞士OneSoon Limited软件英国Openhost, SL云技术西班牙Optimal Plus大数据/存储以色列OurCrowd风险资本/投资以色列Overleaf云技术英国P.I.Works电讯土耳其Padawan Ltd网络英国Parx Plastics BV清洁技术荷兰PleaseTech Ltd软件英国Polar OLED Ltd硬件英国Privatequity.biz互联网/网络以色列Productsup GmbH软件德国Pyreos Limited硬件英国Qosmos软件法国QUASARDB软件法国Radisens Diagnostics医疗设备爱尔兰rational motion清洁技术德国RedCloud Technologies软件英国Relay42云技术荷兰Roima Intelligence其他芬兰Securosys SA网络安全瑞士Sentiance软件比利时Shadow Technologies网络/互联网以色列Smoltek AB纳米技术瑞典Spideo软件法国Sportswik AB娱乐媒体dia瑞典Stratoscale虚拟技术以色列Takeaway.com B.V.网络/互联网荷兰Teamnet Group软件罗马尼亚The Nostrum Group Ltd软件英国TimeLog A/S软件丹麦Tinitell电讯瑞典TitanHQ网络安全爱尔兰Umbilical Design其他瑞典VATBOX云技术英国Venture Spirit云技术比利时VerseOne软件英国Visma Solutions Oy云技术芬兰Wax Digital Ltd云技术英国网络lib大数据/存储法国WeekCal BV移动技术荷兰Zapgocharger Ltd消费电子英国Zebra Medical Vision生命科学/生物技术以色列ZeroLight软件英国
互联网论坛
BBS论坛(二十五)
BBS论坛(二十五)
25.1.发布帖子后台逻辑完成(1)apps/models.py代码语言:javascript复制class PostModel(db.Model): __tablename__ = 'post' id = db.Column(db.Integer, primary_key=True, autoincrement=True) title = db.Column(db.String(200), nullable=False) content = db.Column(db.Text, nullable=False) create_time = db.Column(db.DateTime, default=datetime.now) board_id = db.Column(db.Integer, db.ForeignKey('board.id')) board = db.relationship('BoardModel', backref='posts')(2)front/decorater.py代码语言:javascript复制from flask import session,redirect,url_for from functools import wraps import config def login_requried(func): @wraps(func) def wrapper(*args,**kwargs): if config.FRONT_USER_ID in session: return func(*args,**kwargs) else: return redirect(url_for('front.signin')) return wrapper(3)front/forms.py代码语言:javascript复制class AddPostForm(BaseForm): title=StringField(validators=[InputRequired(message='请输入标题')]) content=StringField(validators=[InputRequired(message='请输入内容')]) board_id=IntegerField(validators=[InputRequired(message='请选择版块')])(4)front/views.py代码语言:javascript复制@bp.route('/apost/', methods=['POST', 'GET']) @login_requried def apost(): if request.method == 'GET': boards = BoardModel.query.all() return render_template('front/front_apost.html', boards=boards) else: form = AddPostForm(request.form) if form.validate(): title = form.title.data content = form.content.data board_id = form.board_id.data board = BoardModel.query.get(board_id) if not board: return restful.params_error(message='没有这个版块') post = PostModel(title=title, content=content, board_id=board_id) post.board = board db.session.add(post) db.session.commit() return restful.success() else: return restful.params_error(message=form.get_error())25.2.发布帖子界面布局完成(1)把ueditor静态文件放到static目录下(2)apps目录下新建ueditor目录init.py代码语言:javascript复制from .ueditor import bpueditor.py代码语言:javascript复制#encoding: utf-8 from flask import ( Blueprint, request, jsonify, url_for, send_from_directory, current_app as app ) import json import re import string import time import hashlib import random import base64 import sys import os from urllib import parse # 更改工作目录。这么做的目的是七牛qiniu的sdk # 在设置缓存路径的时候默认会设置到C:/Windows/System32下面 # 会造成没有权限创建。 os.chdir(os.path.abspath(sys.path[0])) try: import qiniu except: pass from io import BytesIO bp = Blueprint('ueditor',__name__,url_prefix='/ueditor') UEDITOR_UPLOAD_PATH = "" UEDITOR_UPLOAD_TO_QINIU = False UEDITOR_QINIU_ACCESS_KEY = "" UEDITOR_QINIU_SECRET_KEY = "" UEDITOR_QINIU_BUCKET_NAME = "" UEDITOR_QINIU_DOMAIN = "" @bp.before_app_first_request def before_first_request(): global UEDITOR_UPLOAD_PATH global UEDITOR_UPLOAD_TO_QINIU global UEDITOR_QINIU_ACCESS_KEY global UEDITOR_QINIU_SECRET_KEY global UEDITOR_QINIU_BUCKET_NAME global UEDITOR_QINIU_DOMAIN UEDITOR_UPLOAD_PATH = app.config.get('UEDITOR_UPLOAD_PATH') if UEDITOR_UPLOAD_PATH and not os.path.exists(UEDITOR_UPLOAD_PATH): os.mkdir(UEDITOR_UPLOAD_PATH) UEDITOR_UPLOAD_TO_QINIU = app.config.get("UEDITOR_UPLOAD_TO_QINIU") if UEDITOR_UPLOAD_TO_QINIU: try: UEDITOR_QINIU_ACCESS_KEY = app.config["UEDITOR_QINIU_ACCESS_KEY"] UEDITOR_QINIU_SECRET_KEY = app.config["UEDITOR_QINIU_SECRET_KEY"] UEDITOR_QINIU_BUCKET_NAME = app.config["UEDITOR_QINIU_BUCKET_NAME"] UEDITOR_QINIU_DOMAIN = app.config["UEDITOR_QINIU_DOMAIN"] except Exception as e: option = e.args[0] raise RuntimeError('请在app.config中配置%s!'%option) csrf = app.extensions.get('csrf') if csrf: csrf.exempt(upload) def _random_filename(rawfilename): letters = string.ascii_letters random_filename = str(time.time()) + "".join(random.sample(letters,5)) filename = hashlib.md5(random_filename.encode('utf-8')).hexdigest() subffix = os.path.splitext(rawfilename)[-1] return filename + subffix @bp.route('/upload/',methods=['GET','POST']) def upload(): action = request.args.get('action') result = {} if action == 'config': config_path = os.path.join(bp.static_folder or app.static_folder,'ueditor','config.json') with open(config_path,'r',encoding='utf-8') as fp: result = json.loads(re.sub(r'\/\*.*\*\/','',fp.read())) elif action in ['uploadimage','uploadvideo','uploadfile']: image = request.files.get("upfile") filename = image.filename save_filename = _random_filename(filename) result = { 'state': '', 'url': '', 'title': '', 'original': '' } if UEDITOR_UPLOAD_TO_QINIU: if not sys.modules.get('qiniu'): raise RuntimeError('没有导入qiniu模块!') buffer = BytesIO() image.save(buffer) buffer.seek(0) q = qiniu.Auth(UEDITOR_QINIU_ACCESS_KEY, UEDITOR_QINIU_SECRET_KEY) token = q.upload_token(UEDITOR_QINIU_BUCKET_NAME) ret,info = qiniu.put_data(token,save_filename,buffer.read()) if info.ok: result['state'] = "SUCCESS" result['url'] = parse.urljoin(UEDITOR_QINIU_DOMAIN,ret['key']) result['title'] = ret['key'] result['original'] = ret['key'] else: image.save(os.path.join(UEDITOR_UPLOAD_PATH, save_filename)) result['state'] = "SUCCESS" result['url'] = url_for('ueditor.files',filename=save_filename) result['title'] = save_filename, result['original'] = image.filename elif action == 'uploadscrawl': base64data = request.form.get("upfile") img = base64.b64decode(base64data) filename = _random_filename('xx.png') filepath = os.path.join(UEDITOR_UPLOAD_PATH,filename) with open(filepath,'wb') as fp: fp.write(img) result = { "state": "SUCCESS", "url": url_for('files',filename=filename), "title": filename, "original": filename } return jsonify(result) @bp.route('/files/<filename>/') def files(filename): return send_from_directory(UEDITOR_UPLOAD_PATH,filename)(3)perfect_bbs.py代码语言:javascript复制from apps.ueditor import bp as ueditor_bp app.register_blueprint(ueditor_bp)(4)front/index.html代码语言:javascript复制<a class="btn btn-warning btn-block" href="{{ url_for('front.apost') }}" id="add-post-btn">发布帖子</a>(5)front/apost.html代码语言:javascript复制{% extends 'front/front_base.html' %} {% from 'common/_macros.html' import static %} {% block title %} 发布帖子 {% endblock %} {% block head %} <script src="{{ static('ueditor/ueditor.config.js') }}"></script> <script src="{{ static('ueditor/ueditor.all.min.js') }}"></script> <script src="{{ static('front/js/front_apost.js') }}"></script> {% endblock %} {% block body %} <form method="post"> <div class="form-group"> <div class="input-group"> <span class="input-group-addon">标题</span> <input type="text" name="title" class="form-control"> </div> </div> <div class="form-group"> <div class="input-group"> <span class="input-group-addon">版块</span> <select name="board_id" class="form-control"> {% for board in boards %} <option value="{{ board.id }}">{{ board.name }}</option> {% endfor %} </select> </div> </div> <div class="form-group"> <script id="ueditor" type="text/plain" style="height:500px;"></script> </div> <div class="form-group"> <button class="btn btn-danger" id="submit-btn">发布帖子</button> </div> </form> {% endblock %}(6)front/js/apost.js代码语言:javascript复制$(function () { var ue=UE.getEditor('ueditor',{'serverUrl':'/ueditor/upload/'}); });
加入like.tg生态圈,即可获利、结识全球供应商、拥抱全球软件生态圈加入like.tg生态圈,即可获利、结识全球供应商、拥抱全球软件生态圈加入like.tg生态圈,即可获利、结识全球供应商、拥抱全球软件生态圈