{"id":18854862,"url":"https://github.com/noear/sited","last_synced_at":"2025-04-14T10:50:37.923Z","repository":{"id":145378764,"uuid":"41789535","full_name":"noear/SiteD","owner":"noear","description":"noear::SiteD，数据转换插件引擎（例：转换网站，接入WEB API）","archived":false,"fork":false,"pushed_at":"2017-01-09T04:26:24.000Z","size":775,"stargazers_count":61,"open_issues_count":1,"forks_count":9,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-03-28T00:04:06.233Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"http://www.noear.org","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/noear.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2015-09-02T08:30:40.000Z","updated_at":"2024-06-13T22:53:54.000Z","dependencies_parsed_at":"2023-06-03T16:30:14.106Z","dependency_job_id":null,"html_url":"https://github.com/noear/SiteD","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/noear%2FSiteD","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/noear%2FSiteD/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/noear%2FSiteD/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/noear%2FSiteD/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/noear","download_url":"https://codeload.github.com/noear/SiteD/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248868826,"owners_count":21174754,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-08T03:51:59.045Z","updated_at":"2025-04-14T10:50:37.916Z","avatar_url":"https://github.com/noear.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 申明\n基于SiteD源码开发的项目，请在关于里加上：\n引擎：sited.v30（版本号视具体情况）\n\n谢谢!\n\n# SiteD\nSiteD\n\n插件引擎定制实例（具体要根据应用的需求来定制引擎,可参考/demo/下的示例）\n```java\npublic class DdSource extends SdSource {\n    public final int ver; //版本号\n    public final int engine;//引擎版本号\n    public final String sds; //插件平台服务\n    public final boolean isPrivate;//是否为私密型插件\n    public final int vip;\n\n\n    public final String logo;  //图标\n    public final String author;\n    public final String alert; //提醒（打开时跳出）\n    public final String intro; //介绍\n    //---------------------------------------------------\n    public final DdNodeSet main;\n    public final DdNode hots;\n    public final DdNode updates;\n    public final DdNode search;\n    public final DdNode tags;\n    public final SdNodeSet home;\n\n    private  ISdNode _tag;\n    private  ISdNode _book;\n    private  ISdNode _section;\n    private  ISdNode _object;\n\n    public DdNode tag(String url){\n        Log.v(\"tag.selct::\",url);\n        return  (DdNode)_tag.nodeMatch(url);\n    }\n    public DdNode book(String url){\n        Log.v(\"book.selct::\",url);\n        return  (DdNode)_book.nodeMatch(url);\n    }\n    public DdNode section(String url){\n        Log.v(\"section.selct::\",url);\n        return  (DdNode)_section.nodeMatch(url);\n    }\n\n    public DdNode object1(String url){\n        Log.v(\"object.selct::\",url);\n\n        return  (DdNode)_object.nodeMatch(url);\n    }\n\n    public final DdNode login;\n\n    private final String trace_url;\n\n    public String sited;\n\n    public DdSource(Application app, String xml) throws Exception {\n        super();\n\n        if (xml.startsWith(\"sited::\")) {\n            int start = xml.indexOf(\"::\") + 2;\n            int end = xml.lastIndexOf(\"::\");\n            String txt = xml.substring(start, end);\n            String key = xml.substring(end + 2);\n            xml = DdApi.unsuan(txt, key);\n        }\n\n        sited = xml;\n\n        doInit(app, xml, \"main\");\n\n        sds       = attrs.getString(\"sds\");\n        isPrivate = attrs.getInt(\"private\") \u003e 0;\n        engine    = attrs.getInt(\"engine\");\n        ver       = attrs.getInt(\"ver\");\n        vip       = attrs.getInt(\"vip\");\n\n        author    = attrs.getString(\"author\");\n        intro     = attrs.getString(\"intro\");\n        logo      = attrs.getString(\"logo\");\n\n        if (engine \u003e DdApi.version)\n            alert = \"此插件需要更高版本引擎支持，否则会出错。建议升级！\";\n        else\n            alert = attrs.getString(\"alert\");\n\n        //\n        //---------------------\n        //\n\n        main = (DdNodeSet) body;\n        trace_url = main.attrs.getString(\"trace\");\n\n\n        home = (DdNodeSet) main.get(\"home\");\n\n        hots = (DdNode) home.get(\"hots\");\n        updates = (DdNode) home.get(\"updates\");\n        tags = (DdNode) home.get(\"tags\");\n\n        search = (DdNode) main.get(\"search\");\n\n        _tag = main.get(\"tag\");\n        _book = main.get(\"book\");\n        _section = main.get(\"section\");\n        _object = main.get(\"object\");\n\n        if(_object.isEmpty()){\n            if(_section.isEmpty())\n                _object = _book;\n            else\n                _object = _section;\n        }\n\n\n        login = (DdNode) main.get(\"login\");\n\n\n    }\n\n    private String _FullTitle;\n    public String fullTitle() {\n        if (_FullTitle == null) {\n            if(isPrivate){\n                _FullTitle = title;\n            }else {\n                int idx = url.indexOf('?');\n                if (idx \u003c 0)\n                    _FullTitle = title + \" (\" + url + \")\";\n                else\n                    _FullTitle = title + \" (\" + url.substring(0, idx) + \")\";\n            }\n        }\n\n        return _FullTitle;\n    }\n\n    @Override\n    public void setCookies(String cookies) {\n        super.setCookies(cookies);\n\n        SiteDbApi.setSourceCookies(this);\n    }\n\n    @Override\n    protected boolean DoCheck(String url, String html, String cookies) {\n        if(login.isEmpty()){\n            return true;\n        }else {\n            String temp = callJs(login, \"check\", url, html, cookies);\n\n            return temp.equals(\"1\");\n        }\n    }\n\n    public void tryLogin(ActivityBase activity, boolean isMust){\n        if(login.isEmpty())\n            return;\n\n        if(isMust){\n            login.dataTag=0;\n            doLogin(activity);\n        }else {\n            if (login.dataTag == 0) {\n                login.dataTag = 1;\n                doLogin(activity);\n            }\n        }\n    }\n\n    private void doLogin(ActivityBase activity){\n        if(login.isWebrun()) {\n            Navigation.showWebOnly(activity, login.url);\n        }else{\n\n        }\n    }\n\n    public static boolean isHots(SdNode node){\n        return \"hots\".equals(node.name);\n    }\n\n    public static boolean isUpdates(SdNode node){\n        return \"updates\".equals(node.name);\n    }\n\n    public static boolean isTags(SdNode node){\n        return \"tags\".equals(node.name);\n    }\n\n    public static boolean isBook(SdNode node){\n        return \"book\".equals(node.name);\n    }\n\n\n    //\n    //--------------------------\n    //\n    private boolean _isAlerted = false;\n    public boolean tryAlert(ActivityBase activity,Act1\u003cBoolean\u003e callback) {\n        if (TextUtils.isEmpty(alert))\n            return false;\n        else {\n            if (_isAlerted == false) {\n                new AlertDialog.Builder(activity)\n                        .setTitle(\"提示\")\n                        .setMessage(alert)\n                        .setNegativeButton(\"退出\", (d, w) -\u003e {\n                            _isAlerted = false;\n                            d.dismiss();\n                            callback.run(false);\n                        })\n                        .setPositiveButton(\"继续\", (d, w) -\u003e {\n                            _isAlerted = true;\n                            d.dismiss();\n                            callback.run(true);\n                        }).setCancelable(false).show();\n            }\n\n            return true;\n        }\n    }\n\n    public String buildWeb(SdNode config,String url) {\n        if (config.attrs.contains(\"buildWeb\")==false)\n            return url;\n        else\n            return callJs(config, \"buildWeb\", url, config.jsTag);\n    }\n\n    public void traceUrl(String url ,SdNode confg) {\n        if (TextUtils.isEmpty(trace_url) == false) {\n            HashMap\u003cString, String\u003e data = new HashMap\u003c\u003e();\n            data.put(\"url\", url);\n            data.put(\"node\", confg.name);\n\n            HttpUtil.post(trace_url, data, (code, text) -\u003e {\n            });\n        }\n    }\n}\n\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnoear%2Fsited","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnoear%2Fsited","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnoear%2Fsited/lists"}