挑战PHP-最大的敌人就是你自己

自2003年开始,先学HTML,再学PhotoShop,再动动易ASP网站系统,后来有JSP,但从性价比的角度而言,个人空间也是个不错的选择,然一直以来,没有勇气去学PHP,那怎样给自己一个开始呢?机会总是来得猝不及防啊!

一、背景

前几天,我的律师邻居,找我帮忙,说让我帮忙维护一下他们律师事务所的网站,然后只给了我个用户名和密码,登陆进去一看,是worldPress实现的,以我的急性子而言,肯定就是上来就是撸代码,但搞了半天,还是没有能完成邻居的要求。这里要说一下CMS网站的做法原理都是模板替换,通俗点讲,就是java 中的字符串替换 比如有 模板字符串 如下,

$title 

在显示的时候,要替换成:

欢迎来我的潘辰星的技术博客 

那这个时候,决定CMS使用的,就是这个模板字符串的存储位置了。

存在DB中:动易系统的实现,然后发布系统只需要填标题、内容、关键词,然后再通过DB查出模板,再进行替换后,生成静态的Html代码

文件模板中:WorldPress的实现,动态查询数据库后完成字符串替换|

优缺点比较 存在DB中 文件模板中
管理方便性 易管理,一个后台搞定所有功能 只能发表文章,编辑模板需要FTP权限
SEO友好 静态Html页面,更易于SEO检索 动态页面,只更改ID,不利于SEO
访问速度 快,因为只涉及html读取速度 慢,先检索DB,再渲染页面
模板修改 需重新生成所有涉及的文章模板 FTP直接修改即可

然后想想好在人家那也是线上环境,不好直接撸起袖子干,就自己去买了个PHP+Mysql的空间,自己开始搭wroldPress环境(相当于我们的日常环境),然后通过学习,搞定了邻居的问题,但面临的问题是,我买了这套空间不就浪费了吗?

做为一个技术人员,我还是很勤俭持家的。

机会就是留给有准备的人

正在此时,看到了一篇推送平台:类似于极光之类的软件是怎么盈利的文章,其实主要就是安卓的开放,可以获取到所有你安装的APP列表,如果装有股票类软件,那知道你在炒股,如果有母婴类软件,知道你有孩子,如果装有招聘类软件,知道你在找工作,然后还可以获取到大概位置,那对这个人的标签打上去,再精准营销,就大有可为了。

然后就尝试着去撸代码了。我们先要把App列表给读出来:见如下代码:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        new AsyncTask() {

            @Override
            protected String doInBackground(String... params) {
                List appInfos = getUserAppInfos(MainActivity.this);
                for (int i = 0; i < appInfos.size(); i++) {
                    AppInfo appInfo = appInfos.get(i);
                    Log.e("llllll", appInfo.packageName);
                }
                return null;
            }
        }.execute();

    }

    public static ArrayList getUserAppInfos(Context context) {
        ArrayList appList = new ArrayList(); // 用来存储获取的应用信息数据

        List packages = context.getPackageManager().getInstalledPackages(0);
        for (int i = 0; i < packages.size(); i++) {
            PackageInfo packageInfo = packages.get(i);
            // 只要非系统应用
            if ((packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 0) {
                AppInfo tmpInfo = new AppInfo();
                tmpInfo.appName = packageInfo.applicationInfo.loadLabel(context.getPackageManager()).toString();
                tmpInfo.packageName = packageInfo.packageName;
                tmpInfo.versionName = packageInfo.versionName;
                // String dir = packageInfo.
                // int size = Integer.valueOf((int) new File(dir).length());
                // packageInfo.
                // tmpInfo.versionCode = packageInfo.versionCode;
                tmpInfo.appBitmap = ((BitmapDrawable) packageInfo.applicationInfo.loadIcon(context.getPackageManager())).getBitmap();
                appList.add(tmpInfo);
            }

        }
        return appList;
    }

    static class AppInfo {

        // ID
        public String id;
        // 文件名
        public String fileName;
        // 包名
        public String packageName;
        // 版本名称
        public String versionName;
        // 应用名称
        public String appName;
        // 文件大小
        public String fileSize;
        // 应用图标
        public Bitmap appBitmap;
        // 是否可删除
        public boolean canRemove;
        // 文件绝对路径
        public String apkPath;
    }
}

然后就可以得到一系列的App信息了,类似如下json代码:

[{"appName":"LearnRxJava","packageName":"com.ssevening.www.learnrxjava","versionName":"1.0"},{"appName":"LearnDagger2","packageName":"com.ssevening.www.learndagger2","versionName":"1.0"}]

哇,数据获取到了,那肯定是找个地方存起来啊!存起来又面临如下问题:

  • 上报给打点平台,不方便后期管理和扩展,同时按App包名来提交,要循环遍历提交多次,不靠谱。
  • 上报到自己的服务器,通过POST请求,把数据存起来,也方便自己扩展,那就又涉及到技术性价比了
    • ASP Access数据库,DB和页面在同一个空间下,抗不住压力,放弃。
    • JSP空间费用高一些,也放弃
    • 不是说过PHP是最好的语言吗?但这个语言,自己一直也没有玩过,但性能还不错,逼自己搞一把吧!

到现在为止,我们有了数据,有了存储,有了服务器,余下的就是需求了。我们的需求很简单:

  1. 把用户列表收集起来,先知道市面上有哪些App。
  2. 收集到这些App列表后,再针对这些App进行类目划分。
  3. 后期用户再抛应用列表数据上来的时候,我们就可以动态给用户返回内容了。

这里我们讲第一步,收集信息, PHP代码如下:

packageName)){ 
        // 查询数据库中是否已存在这个包名
        $searchPkgSql = "select COUNT(*) AS num_rows from app_info where package_name='".$appInfoList[$x]->packageName."' LIMIT 1";
        echo $searchPkgSql;
        // 执行查询
        $result = mysql_query($searchPkgSql);   
        // 设置个标记位
        $haveRec = 0;
        while($row = mysql_fetch_array($result)){
            //如果有值,大于0,代表有值,然后执行更新
            if($row['num_rows']> 0){
                $haveRec = 1;
            }else{
                $haveRec = 0;
            }
            
        } 
        // 这个packageName有值
        if($haveRec == 1){
            // 更新这个包名对应的安装次数
            mysql_query("UPDATE app_info SET install_num = install_num + 1 WHERE  package_name= '".$appInfoList[$x]->packageName."'");
        }else {
        // 没有值,插入一条新记录到数据库
            mysql_query("INSERT INTO app_info (package_name,app_name) VALUES ('".$appInfoList[$x]->packageName."','".$appInfoList[$x]->appName."')");
        }
    }
  }
    // 关掉数据库连接
    mysql_close($con);
?>

写好代码,通过 API测试平台 进行测试,就实现了收集用户安装列表的信息了。
关于PHP相关内容,都可以从这里学到:PHP w3school

数据库涉及字段: id package_name app_name install_num category, 就够了。搞了一下午,以前畏惧的PHP,至少现在也会简单的写了,算是一个起步。

后来想了想,这也是另外一种逼自己进步的方式吧,你花了钱,觉得这个产品,如果不用,就可惜了,然后就一定要去用一用,玩一玩。然后发现,真正的敌人,就是你自己。

通过这次事件有以下几点经验分享:

  • 所谓的困难,只是你自己没有征服他的勇气罢了。
  • 对于提升自己有利的钱,该花就不要吝啬,不管是健康还是知识。

欢迎关注作者微信公众号,及时获得作者更新:

挑战PHP-最大的敌人就是你自己_第1张图片
微信公众号

另外还建立了小密圈:圈主 和 嘉宾 都就职于 阿里巴巴 的顶尖开发者,开发的app被Google 编辑推荐,对性能,架构,图片,MD设计都有研究和深入,欢迎大家加入,提升自己,一起进步,互相帮助交流!

挑战PHP-最大的敌人就是你自己_第2张图片
微信公众号

你可能感兴趣的:(挑战PHP-最大的敌人就是你自己)